服务器:Windows Server 2012
1.预备工作
在IIS中搭建网站
为避免万一,将文件路径权限打开
2.在IIS中安装CGI模块
打开控制面板,在“程序和功能”中点击“启用或关闭Windows功能”
3.安装并启用 wfastcgi
在要使用的环境中运行
pip install wfastcgi
找到wfastcgi安装位置
直接在上图中的Scripts文件夹下,用管理员身份打开命令窗口,执行 wfastcgi-enable.exe 程序;
记住红框引号中 的"xxx\python.exe|xxx\lib\site-packages\wfastcgi.py",这个非常重要,会用于后面的IIS配置中。xxx这里代表的是Python环境的本地路径“C:\Users\Administrator\AppData\Local\Programs\Python\Python39”
C:\Users\Administrator\AppData\Local\Programs\Python\Python39\python.exe|C:\Users\Administrator\AppData\Local\Programs\Python\Python39\Lib\site-packages\wfastcgi.py
或直接右键,以管理员身份运行 wfastcgi-enable.exe ,但这样就无法获取 "xxx\python.exe|xxx\lib\site-packages\wfastcgi.py",再用命令窗口运行会出现:
4.编辑网站:在处理程序映射中,添加模块映射
双击 “处理程序映射”
点击“添加模块映射...”
点击“请求限制”,取消选中
添加完模块映射,确定
是
即可在程序应射中看见刚刚添加的模块映射
按理说,在这一步设置完毕后,会在Flask应用的根文件夹里自动生成一个web.config文件,因为以上操作就是为了生产web.config文件。
但我的没有。经查验,是因为IIS中缺少ASP。为保证万无一失,干脆将其全部安装:
删去已经生成的模块映射,重新生成,即可。
5. web.config
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<handlers>
<remove name="AFlaskFastCgi" />
<add name="AFlaskFastCgi" path="*" verb="*" modules="FastCgiModule" scriptProcessor="C:\Users\Administrator\AppData\Local\Programs\Python\Python39\python.exe|C:\Users\Administrator\AppData\Local\Programs\Python\Python39\Lib\site-packages\wfastcgi.py" resourceType="Unspecified" />
</handlers>
</system.webServer>
</configuration>
修改web.config文件,在appSettings节点里添加两个必需的参数“WSGI_HANDLER”和“PYTHONPATH”。
“WSGI_HANDLER”的参数为入口文件,如,入口文件名为“XXXX.py”,则值为“XXXX.app”
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<handlers>
<remove name="AFlaskFastCgi" />
<add name="AFlaskFastCgi" path="*" verb="*" modules="FastCgiModule" scriptProcessor="C:\Users\Administrator\AppData\Local\Programs\Python\Python39\python.exe|C:\Users\Administrator\AppData\Local\Programs\Python\Python39\Lib\site-packages\wfastcgi.py" resourceType="Unspecified" />
</handlers>
</system.webServer>
<appSettings>
<add key="WSGI_HANDLER" value="main.app" />
<add key="PYTHONPATH" value="C:\Users\Administrator\Desktop\roadpp\updownload" />
</appSettings>
</configuration>
6.发生未知 FastCGI 错误
浏览网站,发生“ 错误代码 0x8007010b ”的500错误
修改该网站所对应的应用程序池
应用程序池->XXXXX->高级设置->进程模型->标识,修改为:LocalSystem
修改后重启,网站可访问。
7.无法显示图片
运行起来的网站无法显示图片
其实是因为图片路径里面包含“非法字符”汉字、加号,使得其将png视为text/html,无法解析。
加号“+”问题:
在web.config里加入如下代码,可解决加号“+”的问题
<system.webServer>
<-- -->
</handlers>
<security>
<requestFiltering allowDoubleEscaping="true" />
</security>
</system.webServer>
汉字问题无法解决,大量图片无法加载,遂放弃,用waitress+nginx,成功
参考:
在IIS中部署Flask应用_当下有大吉8的博客-CSDN博客_flask iis部署
iis7.0 发生未知 FastCGI错误,错误代码 0x8007010b 的解决办法_xl502689459的博客-CSDN博客
手把手为你示范IIS路径或文件名不能包含中文的二个解决方法--win7系统吧
Waitress — Flask Documentation (2.2.x)