欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python web在IIS上发布方法和原理

程序员文章站 2022-06-03 20:38:51
Python web应用想要发布使用iis发布有两种方式,这篇文章就为大家介绍一下这两种方式的具体实现: 1.配置HttpPlatform程序 HttpPlatform 模块将套接字连接直接传递到独立的 Python 进程。 借助此传递可根据需要运行任何 Web 服务器,但需要用于运行本地 Web ......

python web应用想要发布使用iis发布有两种方式,这篇文章就为大家介绍一下这两种方式的具体实现:

1.配置httpplatform程序

httpplatform 模块将套接字连接直接传递到独立的 python 进程。 借助此传递可根据需要运行任何 web 服务器,但需要用于运行本地 web 服务器的启动脚本。 在 web.config 的 <httpplatform> 元素中指定脚本,其中 processpath 属性指向站点扩展的 python 解释器,arguments 属性指向脚本和希望提供的任何参数:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webserver>
    <handlers>
      <add name="pythonhandler" path="*" verb="*" modules="httpplatformhandler" resourcetype="unspecified"/>
    </handlers>
    <httpplatform processpath="c:\python36-32\python.exe"
                  arguments="c:\home\site\wwwroot\runserver.py --port %http_platform_port%"
                  stdoutlogenabled="true"
                  stdoutlogfile="c:\home\logfiles\python.log"
                  startuptimelimit="60"
                  processesperapplication="16">
      <environmentvariables>
        <environmentvariable name="server_port" value="%http_platform_port%" />
      </environmentvariables>
    </httpplatform>
  </system.webserver>
</configuration>

此处显示的 http_platform_port 环境变量包含端口,本地服务器使用该端口侦听来自 localhost 的连接。 此示例还演示如何根据需要创建其他环境变量,本示例中为 server_port。

关于httplplatform的更多描述可以参考https://docs.microsoft.com/en-us/iis/extensions/httpplatformhandler/httpplatformhandler-configuration-reference

2.配置 fastcgi 处理程序

fastcgi 是在请求级别工作的接口。 iis 接收传入的连接,并将每个请求转发到在一个或多个持久 python 进程中运行的 wsgi 应用。

若要使用 wfastcgi 包,请先安装并配置它,如 pypi.org/project/wfastcgi/ 所述。

接下来,将应用的 web.config 文件修改为,在 pythonhandler 键中添加 python.exe 和 wfastcgi.py 的完整路径。

  • 修改 web.config 中的 pythonhandler 条目,让路径与 python 安装位置一致(有关确切的详细信息,请参阅 iis 配置参考 (iis.net))。

 

<system.webserver>
  <handlers>
    <add name="pythonhandler" path="*" verb="*" modules="fastcgimodule"
        scriptprocessor="c:\python36-32\python.exe|c:\python36-32\wfastcgi.py"
        resourcetype="unspecified" requireaccess="script"/>
  </handlers>
</system.webserver>
  • 在 web.config 的 <appsettings> 部分中,为 wsgi_handler、wsgi_log(可选)和 pythonpath 添加键:
<appsettings>
  <add key="pythonpath" value="c:\home\site\wwwroot"/>
  <!-- the handler here is specific to bottle; see the next section. -->
  <add key="wsgi_handler" value="app.wsgi_app()"/>
  <add key="wsgi_log" value="c:\home\logfiles\wfastcgi.log"/>
</appsettings>

pythonpath 的值可以*扩展,但必须包括你的应用的根目录,他扩展了sys.path,可以在这个路径下找到import的包。
wsgi_handler 必须指向可从你的应用导入的 wsgi 应用,针对不同的框架,这个值也有一些区别,下面是一些例子。

1.bottle:确保 app.wsgi_app 后面有括号,如下所示。 此操作是必需的,因为该对象是函数(请参阅 app.py))而非变量:

<!-- bottle apps only -->
<add key="wsgi_handler" value="app.wsgi_app()"/>

2.flask:将 wsgi_handler 值更改为 <project_name>.app,其中 <project_name> 与项目名称匹配。 可通过查看 runserver.py 中的 from <project_name> import app 语句,找到准确的标识符。 例如,如果项目命名为“flaskazurepublishexample”,则该条目如下所示:

<!-- flask apps only: change the project name to match your app -->
<add key="wsgi_handler" value="flask_iis_example.app"/>

3.django:对于 django 项目,需要对“web.config”进行两项更改。 首先,将 wsgi_handler 值更改为 django.core.wsgi.get_wsgi_application()(该对象位于 wsgi.py 文件中):

<!-- django apps only -->
<add key="wsgi_handler" value="django.core.wsgi.get_wsgi_application()"/>

其次,在 wsgi_handler 条目下添加以下条目,并将 djangoazurepublishexample 替换为项目名称:

<add key="django_settings_module" value="django_iis_example.settings" />

wsgi_log 为可选,但建议在调试应用时使用,记录日志。

 

以上就是这两种方式,但是作为补充我还是想跟大家分享一下第二种方式,使用fastcgi时,我们在安装完wfastcgi后输入命令wfastcgi-enable之后程序做了什么。

Python web在IIS上发布方法和原理

我们可以根据iis文档中对于fastcgi节的描述了解到。如果我们想要在web.config使用fastcgi时,必须先定义了该模块:

Python web在IIS上发布方法和原理

 

而这个定义方法呢,就是在iis全局配置applicationhost.config中添加下面的配置,而这个也是我们在输入wfastcgi-enable之后做的事情:

<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/xml-document-transform">
  <system.webserver>
    <fastcgi>
      <application fullpath="d:\home\site\wwwroot\python34\python.exe" xdt:locator="match(fullpath)" xdt:transform="remove" />
      <application fullpath="d:\home\site\wwwroot\python34\python.exe" arguments="d:\python34\scripts\wfastcgi.py"  maxinstances="0" xdt:transform="insert"/>
    </fastcgi>
  </system.webserver>
</configuration>

如果您遇到了无法使用wfastcgi-enable这个命令的情况,比如azure web app的windows环境,那么你可以使用这种方式使用自定义的python版本。

 

参考文档:

https://docs.microsoft.com/en-us/iis/extensions/httpplatformhandler/httpplatformhandler-configuration-reference

https://docs.microsoft.com/zh-cn/visualstudio/python/configure-web-apps-for-iis-windows?view=vs-2019

https://pypi.org/project/wfastcgi/

https://docs.microsoft.com/en-us/iis/configuration/system.webserver/fastcgi/