因此,我的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>
你必须确保,
- 在
wsgi.py
正确的代码中写入%HTTP_PLATFORM_PORT%
通过环境变量SERVER_PORT
或参数传递--port
。 - 你
wsgi.py
应该启动一个生产环境的 Python 应用服务器,比如 Unicorn(详见https://stackoverflow.com/a/54381386/11182),而不是 Flask 开发服务器。
但是,您目前没有做到任何一点wsgi.py
。因此,作为 Python 开发人员,您需要进一步深入研究该部分,搜索引擎中有许多有用的资源。
在浏览器中使用的正确 URL
您没有在这里透露 IIS 站点绑定,因此无法评论您可以使用哪些正确的 URL(包括 IP 地址或主机名)来访问该站点。
这是一个非常独立的问题,因为 IIS 站点绑定本身并不容易理解。但您可能会从中获得一些提示我的帖子。
SSL/HTTPS
再次强调,这也是一个单独的话题。
请首先从 HTTP 站点绑定开始,一旦成功,您就可以继续配置具有适当证书的有效 HTTPS 绑定。我也有一些提示。