IIS 上的 Python Flask:访问主机名时不会加载 HttpPlatform

IIS 上的 Python Flask:访问主机名时不会加载 HttpPlatform

因此,我的web.config当前生产环境如下所示,并且我访问该网站时该网站可以正常运行

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <add name="Python FastCGI" path="*" verb="*" modules="FastCgiModule" scriptProcessor="C:\Python310\python.exe|C:\Python310\lib\site-packages\wfastcgi.py" resourceType="Unspecified" requireAccess="Script" />
    </handlers>
  </system.webServer>
<appSettings>
    <add key="WSGI_HANDLER" value="wsgi.app" />
    <add key="PYTHONPATH" value="E:\apps\prod" />
    <add accessType="Allow" users="*" />
  </appSettings>
</configuration>

然而阅读https://docs.microsoft.com/en-us/visualstudio/python/configure-web-apps-for-iis-windows?view=vs-2022#configure-the-httpplatform-handler这表明这不是解决问题的办法,因此修改了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:\Python310\python.exe"
                  arguments="E:\Apps\prod\wsgi.py --port %HTTP_PLATFORM_PORT%"
                  stdoutLogEnabled="true"
                  stdoutLogFile="E:\logs\python.log"
                  startupTimeLimit="60"
                  processesPerApplication="16">
      <environmentVariables>
        <environmentVariable name="SERVER_PORT" value="%HTTP_PLATFORM_PORT%" />
      </environmentVariables>
    </httpPlatform>
  </system.webServer>
</configuration>

现在,当我访问该网站时,它只会旋转一会儿,日志文件显示:

 * Serving Flask app 'digital' (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on all addresses (0.0.0.0)
   WARNING: This is a development server. Do not use it in a production deployment.
 * Running on http://127.0.0.1:5000
 * Running on http://x.x.x.x:5000 (Press CTRL+C to quit)

果然,如果我转到 IP,它就会运行,但是当我转到我的域/主机名时,它不会运行,而是挂起并将上述内容记录到文件中

wsgi.py

"""
Application entry point
"""

from digital import init_app

app = init_app()

if __name__ == "__main__":
    app.run(host="0.0.0.0",threaded=True)

有什么建议么?

谢谢

答案1

您的 IIS 设置存在多个问题,因此通过 HttpPlatformHandler 的 Python 尚无法运行。

要了解更多典型设置,您可以参考我的博客文章

解释web.config

XML 配置如下

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <add name="PythonHandler" path="*" verb="*" modules="httpPlatformHandler" resourceType="Unspecified"/>
    </handlers>
    <httpPlatform processPath="C:\Python310\python.exe"
                  arguments="E:\Apps\prod\wsgi.py --port %HTTP_PLATFORM_PORT%"
                  stdoutLogEnabled="true"
                  stdoutLogFile="E:\logs\python.log"
                  startupTimeLimit="60"
                  processesPerApplication="16">
      <environmentVariables>
        <environmentVariable name="SERVER_PORT" value="%HTTP_PLATFORM_PORT%" />
      </environmentVariables>
    </httpPlatform>
  </system.webServer>
</configuration>

你必须确保,

  1. wsgi.py正确的代码中写入%HTTP_PLATFORM_PORT%通过环境变量SERVER_PORT或参数传递--port
  2. wsgi.py应该启动一个生产环境的 Python 应用服务器,比如 Unicorn(详见https://stackoverflow.com/a/54381386/11182),而不是 Flask 开发服务器。

但是,您目前没有做到任何一点wsgi.py。因此,作为 Python 开发人员,您需要进一步深入研究该部分,搜索引擎中有许多有用的资源。

在浏览器中使用的正确 URL

您没有在这里透露 IIS 站点绑定,因此无法评论您可以使用哪些正确的 URL(包括 IP 地址或主机名)来访问该站点。

这是一个非常独立的问题,因为 IIS 站点绑定本身并不容易理解。但您可能会从中获得一些提示我的帖子

SSL/HTTPS

再次强调,这也是一个单独的话题。

请首先从 HTTP 站点绑定开始,一旦成功,您就可以继续配置具有适当证书的有效 HTTPS 绑定。我也有一些提示

相关内容