JQ9*_*JQ9 8 python iis fastcgi flask
有人能用IIS设置Python吗?一直试图弄清楚,但它不起作用,这让我发疯.我看到很多例子,但我无法让它发挥作用.
Python + Flask网络应用程序的路径
C:\inetpub\wwwroot
Run Code Online (Sandbox Code Playgroud)
以下是我遵循的步骤:
在IIS管理器中,突出显示的Web服务器和FastCGI设置中添加了一个具有以下值的应用程序:
Full Path: C:\python35\python.exe
Arguments: C:\inetpub\wwwroot\wfastcgi.py
Environment Variable Collection:
PYTHONPATH: C:\inetpub\wwwroot\
WSGI_HANDLER: app.app
WSGI_LOG: C:\logs\app.txt
Run Code Online (Sandbox Code Playgroud)创建了一个名为MyWebSite的网站,指向C:\ inetpub\wwwroot
在网站的处理程序映射设置中,为FastCgiModule添加了一个模块映射:
Request path: *
Module: FastCgiModule
Executable: C:\python35\python.exe|C:\inetpub\wwwroot\wfastcgi.py
Name: FlaskHandler
Run Code Online (Sandbox Code Playgroud)使用Flask的简单Python应用程序在网络上找到并添加到Web根文件夹.所以在C:\ inetpub\wwww只有3个文件:app.py,web.config和wfastcgi.py
web.config中
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appSettings>
<add key="PYTHONPATH" value="" />
<add key="WSGI_HANDLER" value="app.app" />
<add key="WSGI_RESTART_FILE_REGEX" value="(?i).*\.(py|cnf|config)$" />
</appSettings>
<system.webServer>
<handlers>
<add name="FlaskHandler" path="*" verb="*" modules="FastCgiModule" scriptProcessor="C:\python35\python.exe|C:\inetpub\wwwroot\wfastcgi.py" resourceType="Unspecified" requireAccess="Script" />
</handlers>
</system.webServer>
</configuration>
Run Code Online (Sandbox Code Playgroud)
app.py
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello from FastCGI via IIS!"
if __name__ == "__main__":
app.run()
Run Code Online (Sandbox Code Playgroud)
applicationHost.config:
全球模块部分:
<add name="FastCgiModule" image="%windir%\System32\inetsrv\iisfcgi.dll" />
Run Code Online (Sandbox Code Playgroud)
模块部分:
<add name="FastCgiModule" lockItem="true" />
Run Code Online (Sandbox Code Playgroud)
系统网络服务器部分:
<section name="fastCgi" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
...
<fastCgi>
<application fullPath="C:\Python35\python.exe" arguments="C:\inetpub\wwwroot\wfastcgi.py">
<environmentVariables>
<environmentVariable name="PYTHONPATH" value="C:\inetpub\wwwroot\" />
<environmentVariable name="WSGI_HANDLER" value="app.app" />
<environmentVariable name="WSGI_LOG" value="c:\logs\my_log.txt" />
</environmentVariables>
</application>
</fastCgi>
Run Code Online (Sandbox Code Playgroud)
所以有些原因它不能按预期工作.
HTTP Error 500.0 - Internal Server Error
C:\python35\python.exe - The FastCGI process exited unexpectedly
Run Code Online (Sandbox Code Playgroud)
似乎没有正确调用处理程序的scriptProcessor.它似乎确实被调用,因为当我将值更改为其他东西时,我收到一个错误:
HTTP Error 500.0 - Internal Server Error
<handler> scriptProcessor could not be found in <fastCGI> application configuration
Run Code Online (Sandbox Code Playgroud)
我认为这是一个权限的事情,所以我确保NETWORK SERVICE帐户具有读取和执行.我甚至给每个人帐号完全控制.我认为NETWORK SERVICE是需要许可的帐户.
我添加了日志记录以在app.py中注销调试信息.我没有得到任何日志信息能够写出日志文件.我不确定wfastcgi.py如何使用IIS配置,即使我将其添加到web.config,也可以设置日志文件的位置.也许如果scriptProcessor实际上被调用,它最终会设置它.但是看看它似乎使用系统环境变量的代码,所以我只是将WSGI_LOG值添加为OS环境变量.仍然没有将调试信息记录到日志文件中.
所以我尝试在命令行上直接运行带有wfastcgi文件的python可执行文件作为参数,它似乎按预期工作,进入wfastcgi while循环并等待请求.它还将调试信息记录到日志文件中.
python.exe c:\inetpub\wwwroot\wfastcgi.py
Run Code Online (Sandbox Code Playgroud)
当我运行python服务器时,它在浏览器中导航到localhost:8081时工作,所以我怀疑它是配置的东西.
python app.py runserver 0.0.0.0:8081
Run Code Online (Sandbox Code Playgroud)
那么发生了什么.我没有想法.任何帮助,将不胜感激.
谢谢!这让我疯了.
根据描述,您似乎需要对 IIS 进行一些配置更改。我在 IIS 7.5 上有以下配置设置,并使用 FastCgiModule 运行 Python Flask。以下是您可以采取的步骤:
Actions>>Add并有两个设置。我有 Python 2.7,对于你的情况,你必须输入 Python 3.5 的路径选择左侧的站点名称并双击处理程序映射。在右窗格中的操作下,单击“添加模块映射”并输入
handler.fcgiFastCgiModule C:\Python27\python.exe|C:\Python27\Scripts\wfastcgi.py(Python 版本特定路径) Python FastCGI%ROOTDIR%需要替换为部署目录PYTHONPATH和WSGI_ALT_VIRTUALENV_ACTIVATE_THIS。希望它可以帮助您并为将来遇到相同问题的人节省一些时间。
| 归档时间: |
|
| 查看次数: |
10989 次 |
| 最近记录: |