把Flask框架网站放在某一路径, 我以C盘下Hello文件夹下的Python Flask框架 Hello.py为例。HTML文件在template里,static里是样式,log里是日志文件
Windows Server 安装 IIS 服务器,勾选 CGI.
下载并安装Microsoft Web Platform Installer,在IIS Manager 界面 Management 点击Microsoft Web Platform Installer,安装URL Rewrite 2.1
pip install wfastcgi
cd c:\python_dir\scripts #找到python路径
wfastcgi-enable
记录两个文件 python.exe 和 wfastcgi.py 路径:
c:\program files (x86)\python38-32\python.exe|c:\program files (x86)\python38-32\lib\site-packages\wfastcgi.py
wfastcgi-disable 关闭wfastcgi
在python文件目录下创建web.config文件,有人说最好生成这个文件,我是自己创的没什么问题。
添加 Module Mapping 步骤后可以自动生成web.config
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<security>
<requestFiltering allowDoubleEscaping="true"></requestFiltering>
</security>
<directoryBrowse enabled="false" showFlags="Extension" />
<handlers>
<add name="flask" path="*" verb="*" modules="FastCgiModule" scriptProcessor="c:\program files (x86)\python38-32\python.exe|"c:\program files (x86)\python38-32\lib\site-packages\wfastcgi.py"" resourceType="Unspecified" />
</handlers>
</system.webServer>
<appSettings>
<!-- 2个必须要有的参数:
@WSGI_HANDLER:fastCGI获得请求后调用的flask应用入口。
@PYTHONPATH: 执行整个应用的项目目录
-->
<add key="WSGI_HANDLER" value="Hello.app" />
<add key="PYTHONPATH" value="C:/Hello" />
</appSettings>
</configuration>
把刚才cmd中的两个路径添加到scriptProcessor后
这里的add key中的 Hello.app 即包含app.run的 python程序的名字+app
PYTHONPATH 即是你自己写的flask python文件的路径,这里就是C:/Hello, Hello 文件夹下的Hello.py.
这里可能会添加不成功,不过没关系,一会儿可以手动添加。
在IIS Manager 页面左边 Server 下的 Sites 右键添加新站点,物理路径为Hello文件夹。
在你新创的站点控制台里双击进入Handler Mappings,右边Add Module Mapping。
(不要在IIS控制台直接进入,不然创建的FastCGI会对所有网站生效!)
Module 选 FastCgiModule
Executable 这一栏继续复制刚才的两个路径。由于它本身只支持dll 和 exe 文件,可能添加 wfastcgi.py 的路径的时候可能会出问题。我的解决方法是:python.exe 的路径不加双引号,wfastcgi.py 的路径加双引号。
Request Restrictions 选项点进去 Invoke handler only if request is mapped to 选项的勾去掉,除非你就想让网页显示文件夹目录,如果是这样的话,网站的Directory Browsing 选项需要启用。在这里不多叙述。
回到IIS Manager主页面,找到FastCGISettings选项点击进去,可以看到刚添加的映射。双击点进去。
点击General 里的第一个Environment Variables,如果左边没有就手动添加PYTHONPATH和WSGI_HANDLER
现在你需要让IIS用户拥有访问和执行你的网站脚本的权限,进入网站目录,执行下面两条命令:
cd C:\hello
icacls . /grant “NT AUTHORITY\IUSR:(OI)(CI)(RX)”
icacls . /grant “Builtin\IIS_IUSRS:(OI)(CI)(RX)”
做到这里网站应该可以从iis里打开了。
如果还是因为没有权限报错可以把 Hello 文件夹分享给所有人。
如果发生HTTP 错误 500.19 - Internal Server Error,可以cmd试试以下命令
%windir%/system32/inetsrv/appcmd.exe set config -section:system.webServer/httpCompression /-[name=‘xpress’]