一、iis+wfastcgi
1. 安装wfastcgi
pip install wfastcgi
2. 启用wfastcgi
使用管理员权限打开cmd,输入如下命令:
wfastcgi-enable
该命令会输出如下信息:
C:\Windows\system32>wfastcgi-enable 已经在配置提交路径“MACHINE/WEBROOT/APPHOST”向“MACHINE/WEBROOT/APPHOST”的“system.webServer/fastCgi”节应用了配置更改 "c:\users\funway\appdata\local\programs\python\python36\python.exe|c:\users\funway\appdata\local\programs\python\python36\lib\site-packages\wfastcgi.py" can now be used as a FastCGI script processor
表示已经在iis配置了wafstcgi,其执行命令是…\python.exe …\wfastcgi.py。这一行留着后面需要用到。
3. 配置网站的web.config
在项目的根目录(即manage.py文件所在目录)下新建一个web.config文件。模板如下:
<?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <handlers> <add name="Python FastCGI" path="*" verb="*" modules="FastCgiModule" scriptProcessor="c:\users\funway\appdata\local\programs\python\python36\python.exe|c:\users\funway\appdata\local\programs\python\python36\lib\site-packages\wfastcgi.py" resourceType="Unspecified" requireAccess="Script" /> </handlers> </system.webServer> <appSettings> <!-- Required settings --> <add key="WSGI_HANDLER" value="django.core.wsgi.get_wsgi_application()" /> <add key="PYTHONPATH" value="D:\Project\send_report" /> <!-- Optional settings --> <add key="WSGI_LOG" value="D:\Project\send_report\wsgi.log" /> <add key="WSGI_RESTART_FILE_REGEX" value=".*((\.py)|(\.config))$" /> <add key="DJANGO_SETTINGS_MODULE" value="backend.settings" /> <!-- <add key="APPINSIGHTS_INSTRUMENTATIONKEY" value="__instrumentation_key__" /> <add key="WSGI_PTVSD_SECRET" value="__secret_code__" /> <add key="WSGI_PTVSD_ADDRESS" value="ipaddress:port" /> --> </appSettings> </configuration>
其中需要修改的地方有:
scriptProcessor项,填上步骤2中wfastcgi-enable输出的路径
PYTHONPATH项,为项目的根目录
WSGI_LOG项,wfastcgi的日志文件路径
DJANGO_SETTINGS_MODULE项,django项目的配置文件settings.py的模块路径(即比如该文件路径为./mysite/settings.py,那么就要写作mysite.settings)
PS:我在标准模板中注释掉了APPINSIGHTS_INSTRUMENTATIONKEY、以及PTVSD三行。
APPINSIGHTS_INSTRUMENTATIONKEY这是为微软AZURE云平台的Application Insights服务准备的,如果要启用ApplicationInsights的话,除了要配置这个key,还需要额外pip install applicationinsights模块。由于我们并不需要用到这个服务,所以完全可以把这一行删除。
两个PTVSD配置是为 Visual Studio的远程调试准备的,我们也不需要。
4. 在IIS中新建网站
(注意IIS安装时候的“应用程序开发功能”选项中必须开启ASP、ASP.NET 4.7、CGI功能)
将网站路径指向项目根目录即可,其他配置用默认值。
5. 添加IIS_IUSERS用户组的权限
默认情况下,IIS_IUSERS用户组是没有对python安装目录的读写权限的,这时候iis就无法执行python程序。直接访问刚刚配置好的网站会提示500错误:
所以我们需要给python所在的目录(C:\Users\yourname\AppData\Local\Programs\Python)添加IIS_IUSERS用户组的读取与执行权限。
6. 静态文件配置
配置好后,再次访问网站,py被执行了。但是网站无法返回静态资源文件:
为了解决这个问题,只需要在静态文件所在的目录下添加一个web.config文件,说明不使用在步骤3中的web.config里添加的Python FastCGI解释器即可。
<?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <handlers> <remove name="Python FastCGI" /> </handlers> </system.webServer> </configuration>
之后,再次使用浏览器访问项目网站就都正常了。