按照https://docs.microsoft.com/en-us/visualstudio/python/configure-web-apps-for-iis-windows?view=vs-2019中的步骤将flask应用程序配置为在IIS后面运行并在线搜索,找不到解决我问题的解决方案。
我的web.config为:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="PythonHandler" path="*" verb="*" modules="httpPlatformHandler" resourceType="Unspecified"/>
</handlers>
<httpPlatform processPath="C:\envs\Scripts\python.exe"
arguments="-m flask run --port %HTTP_PLATFORM_PORT%"
stdoutLogEnabled="true"
stdoutLogFile="C:\logs\python.log"
startupTimeLimit="60"
processesPerApplication="16">
<environmentVariables>
<environmentVariable name="FLASK_APP" value="app.py" />
</environmentVariables>
</httpPlatform>
</system.webServer>
</configuration>
访问该网站只会吐出以下内容。我尝试了所有可能的解决方案,包括授予IIS_IUSRS访问权限。在命令提示符下运行应用程序运行正常。 IIS错误消息没有帮助。
编辑:
在安装了http platformhandler之后,现在将其安装在不同的开发盒中,我可以看到该处理程序在工作,但只是一个怪物:502.3 Bad Gateway
详细的错误信息:
模块 httpPlatformHandler 请求的URL http://127.0.0.1:5007/about
通知 ExecuteRequestHandler 物理路径 C:\ inetpub \ wwwroot \ app \ about
处理程序 PythonHandler 登录方法匿名
错误代码 0x8007042b 登录用户匿名
这告诉我处理程序只是将url处理为应用程序根目录中的文件夹,因为http://127.0.0.1:5007/about
只是通往以下内容的途径>
myapp_about.py:
from flask import Blueprint, jsonify
myapp_about = Blueprint('about', __name__)
@myapp_about.route('/about')
def get_about():
return jsonify({"wow": "We really are routed to here. maybe not"})
答案 0 :(得分:0)
在这些说明中没有看到任何内容,但是我认为您的问题是HttpPlatformHandler。尝试删除该错误,看看是否有更好/不同的错误。 HttpPlatformHandler不是IIS的默认配置元素,需要添加,很可能是通过安装类似https://www.iis.net/downloads/microsoft/httpplatformhandler的方法来添加的。
答案 1 :(得分:0)
有相同的问题,并在下面进行了工作。 “付出了很多努力,但我努力了
必须安装HttpPlatform https://www.iis.net/downloads/microsoft/httpplatformhandler 配置编辑器system.webServer / httpPlatform(部分未锁定) 确保应用程序具有日志路径stdoutLogFile =“ c:\ home \ LogFiles \ python.log”的权限 必须设置app.run(port = PORT)PORT = int(environ.get('SERVER_PORT','5555')) 设置防火墙以允许HTTP传入请求”
答案 2 :(得分:0)
这在Windows 10和Windows Server 2019上都使用IIS 10.0为我工作。如其他答案中所述,您必须安装 HttpPlatformHandler 。 (通过Windows Platform Installer下载。)
我的web.config的<handlers>
部分已锁定,因此,我没有直接编辑web.config,而是对IIS 使用了 Add Module Mapping ... 操作。 > Handler Mappings GUI以添加Python处理程序:
您还可以直接通过IIS管理器的GUI编辑网站配置:
我为FLASK_APP环境变量使用了绝对路径,但是似乎也可以使用它。 (实际上,如果您使用默认的Flask应用名称 app.py ,则可以完全忽略环境变量。)
web.config :
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<httpPlatform processPath="C:\Python37\python.exe"
arguments="-m flask run --port %HTTP_PLATFORM_PORT%"
stdoutLogEnabled="true"
stdoutLogFile="C:\inetpub\logs\LogFiles\python.log"
startupTimeLimit="60"
processesPerApplication="16">
<environmentVariables>
<environmentVariable name="FLASK_APP" value="C:\inetpub\wwwroot\hello.py" />
</environmentVariables>
</httpPlatform>
</system.webServer>
</configuration>
这与下面的最小Flask应用程序一起使用。 (也许在添加 Blueprint 和其他端口号之前尝试一下。)
hello.py :
from flask import Flask
app = Flask(__name__)
@app.route('/hi')
def hello_world():
return 'Hello, World!'
有关Windows安全权限的说明: