高层概述
HTTP-> IIS-> ISAPI-> FastCGI-> WSGI(Flask应用程序)
设定步骤
步骤1:安装所需的二进制文件
- 安装Python(2.7或3.x-我使用3.3)
- 安装pip-Win(我使用1.6版)
- 安装pywin32(我使用版本218)
- 使用fcgisetup 1.5安装IIS FastCGI扩展
步骤2:安装可选的二进制程序包
我
pyodbc使用此站点的安装程序.exe进行安装。从源代码安装(例如,用于安装到虚拟环境的pip)需要C
/ C ++编译器。
步骤3:取得的副本 wfastcgi.py
选择一个适合您的版本,最好是一个支持Python 3.3的版本(我使用了David
Ebbo的)。您可能需要这里的“官方”版本。
将
wfastcgi.py脚本安装到其中
C:Inetpubwwwroot,并确保将为您的应用程序提供服务的帐户(默认情况下为“网络服务”)具有对该文件的读取权限。
步骤4:安装virtualenv
到系统站点包
C:Python33scriptspip.exe install virtualenv
(如果您使用的是Python 3.3,并将所有内容都安装在默认位置)
步骤5:安装Flask应用程序
您可以在系统上的任何位置安装应用程序。您可能需要将其安装在下
C:Inetpub
。在本教程中,我们将调用应用程序install的根文件夹%APPROOT%
。(不要在环境变量中加上引号。)确保将为您的应用程序提供服务的帐户(默认情况下为“网络服务”)具有对所有脚本文件的读取权限。该命令:
cacls "%APPROOT%" /S:"D:PAI(A;OICI;FA;;;BA)(A;OICIIO;FA;;;CO)(A;OICI;0x1200a9;;;NS)(A;OICI;FA;;;SY)"
将为您的应用程序目录提供以下权限:
* BUILTIN Administrators:完全控制此文件夹,子文件夹和文件* 创建者所有者:完全控制子文件夹和文件* NT AUTHORITY NETWORK SERVICE:对此文件夹,子文件夹和文件的读取权限* NT AUTHORITY SYSTEM:对此文件夹,子文件夹和文件的完全控制
添加任何必要的本地配置(我的应用程序使用版本控制系统忽略的local.cnf文件),例如数据库URL。
确保您的应用程序中包含一个
Web.config
文件%APPROOT%
-有关文件格式的信息,请参见以下部分。
步骤6:为您的应用程序创建一个virtualenv
C:Python33scriptsvirtualenv.exe --system-site-packages "%APPROOT%env"
(选择名称,
env除非您的应用程序已经使用该目录。)
步骤7:将应用程序所需的软件包安装到virtualenv
cd "%APPROOT%"envscriptsactivatepip install -r Packages
(我的项目将需求规范保存在名为的文件中
Packages。)
步骤8:为您的应用程序创建网站或虚拟目录
使用
inetmgr.msc( 开始 -> 运行… ,然后
inetmgr在编辑框中输入并按 ENTER )启动
Internet信息服务(IIS)管理器 。确保将您创建的节点(网站或虚拟目录)的本地路径设置为Flask应用程序的根文件夹。
wfastcgi.py使用本地路径标识Flask应用程序来处理请求。
授予节点 读取 和脚本( 运行脚本 )权限。
步骤9:设定 fcgiext.ini
该文件与
fcgiext.dll步骤1中安装的目录位于同一目录(默认为
%SYSTEMROOT%system32inetsrv)。
在配置此文件时,您需要几个参数:
- {site id} :当从窗口左侧的树中选择“网站”时,您可以在 Internet信息服务(IIS)管理器 的详细信息(右侧)窗格中找到的数字站点ID 。
- {application name} :
fcgiext.ini
其中提供FastCGI(ISAPI)处理程序参数的部分的名称。您选择此值-选择代表您的应用程序的内容。 - {app的路径} :对于虚拟目录,是网站内要处理的虚拟目录的URL路径。
- {approot} :应用程序根目录的路径。
使用这些参数可以:
将FastCGI请求映射到处理部分:
- 对于整个网站,请添加到该部分。
*: **{site id}** = **{application name}**``[Types] - 对于虚拟目录,请添加到该部分。
*:/lm/w3svc/ **{site id}** /root/ **{path to app}** = **{application name}**``[Types] 添加带有此应用程序参数的处理部分()(完整参考):
[ **{application name}** ]ExePath= **{approot}** envpython.exeArguments=C:Inetpubwwwrootwfastcgi.py
(或wfastcgi.py
安装适配器脚本的任何地方)EnvironmentVars=ENV_VAR1:value,ENV_VAR2:value, _etc._
(有关报价规则,请参见完整参考)。这是设置WSGI_LOG环境变量的好地方-确保为站点提供服务的帐户(默认情况下为“网络服务”)具有文件的写许可权,以及(如果文件不存在)具有将文件添加到的权限。包含的目录。
- 对于整个网站,请添加到该部分。
步骤10:为目标URL配置FastCGI处理
使用 Internet信息服务(IIS)管理器 ,从Flask应用程序要服务的节点(网站或虚拟目录)的上下文(右键单击)菜单中选择“属性…”,并且:
在“主目录”选项卡(网站)或“虚拟目录”选项卡(虚拟目录)中,单击“配置…”按钮。
在“通配符应用程序映射”部分中,使用“插入…”按钮添加通配符映射:
- 可执行文件是在步骤1中安装的FastCGI扩展DLL。其默认位置是
%SYSTEMROOT%system32inetsrvfcgiext.dll
。 - 确保 未选中 “验证该文件是否存在” 。Flask应用程序执行自己的路由,这些路由不一定与磁盘上的文件有任何关系。
- 可执行文件是在步骤1中安装的FastCGI扩展DLL。其默认位置是
Web.config
这个文件是(在此设置)读取
wfastcgi.py, 不是 由IIS。
<?xml version="1.0" encoding="UTF-8"?><configuration> <applicationSettings> <add key=“PYTHONPATH” value=“”/> <add key=“WSGI_HANDLER” value=“module.application”/> </applicationSettings></configuration>
<add>
元素添加环境变量(os.environ
在Python中)。WSGI_HANDLER
必须指定-它告诉wfastcgi.py
如何定位WSGI应用程序对象。如果值以“()”结尾,wfastcgi.py
则将调用命名对象,并期望其返回WSGI应用程序对象。PYTHONPATH
是经过特殊处理的-对的值wfastcgi.py
执行(环境)变量扩展(使用Windows标准%VAR%
表示法)PYTHONPATH
,然后将结果分割为分号,并将条目追加到sys.path
调用WSGI应用程序之前。因为wfastcgi.py
在导入包含WSGI应用程序对象的模块之前将当前目录更改为指定为Web站点或虚拟目录的本地路径的路径,所以在PYTHONPATH中包含空字符串将导致搜索将Flask应用程序目录作为开始点。您还可以在fcgiext.ini
中设置PYTHonPATH (在这种情况下,sys.path
解释器将其包括在内,然后在wfastcgi.py
)中将其包含在内。WSGI_RESTART_FILE_REGEX
给出一个Python正则表达式,用于过滤应触发FastCGI处理程序进程重新启动的路径的文件更改通知。设置为在源文件或配置文件更改时触发。我用(?i).*.(py|cnf|config)$
。WSGI_LOG
可能在这里设置,但我认为最好在设置fcgiext.ini
。
对于IIS 7
从IIS
7开始,FastCGI的某些事情发生了巨大变化。从此版本开始,FastCGI直接通过IIS进行支持,并且未通过扩展程序进行配置(即步骤1.4是不必要的,
fcgiext.ini并且不控制IIS
7+的FastCGI行为,因此不需要创建/编辑它)。相反,请确保在“ 控制面板” >“程序和功能”>“打开或关闭Windows功能”*下的“
Internet信息服务” 下启用了 CGI 。 ***
Web.config
IIS 7是第一个从
Web.config文件中读取与FastCGI相关的配置设置的IIS
。您的
Web.config文件将需要在
<configuration>元素内
<system.webServer>包含一个
<handlers>元素,该元素包含一个元素,该元素包含
<add>具有以下属性的元素:
- 路径:
*
- 动词:
*
- 模块:
FastCgiModule
- resourceType:
Unspecified
- requireAccess:
script
- scriptProcessor: 棘手的一个
该scriptProcessor
属性
<add>元素的此属性必须包含
.exe您要使用的Python解释器文件的完整路径(
scriptsPython
virtualenv子文件夹中的
|路径),后跟a
,然后是
wfastcgi.py您正在使用的文件的完整路径。由于这些路径取决于运行应用程序的计算机的设置,因此您可能需要在部署过程中设置此属性。
IIS服务器范围的设置
- 在中
inetmgr
,单击树中的服务器节点,然后从中心窗格中选择“ FastCGI设置” 。将列出可执行文件/参数对的列表。 - 为您
python.exe
和wfastcgi.py
您正在使用的完整路径添加一个条目。两者都应以相同的方式显示在<handlers>/<add>
元素中Web.config
。 - 确保
PYTHONPATH
在新的FastCGI应用程序条目中设置环境变量,以包括应用程序代码库的根。有关添加一个空的建议PYTHONPATH
在进入<applicationSettings>
你的Web.config
可能并不适用于这个版本的IIS。



