IIS上添加处理程序映射wfastcgi-程序员宅基地

技术标签: python  django  编程  后端  

简单起见,推荐:1、在虚拟环境中 pip install wfastcgi  + 2、 配置web.config + 3、在IIS界面中设置网站应用程序池的标识设置为“LocalSystem” + 4、 (%windir%\system32\inetsrv\appcmd unlock config -section:system.webServer/handlers
%windir%\system32\inetsrv\appcmd unlock config -section:system.webServer/modules
)
 

================

网上关于IIS部署Django的教程中,添加wfastcgi部分通常只讲如何操作,不讲为什么这样操作,导致个性化的情况不知道如何修改、修改后会有什么后果。

要了解更详细,建议还是啃wfastcgi的官方文档,内容不多,但说得比较清楚。 wfastcgi · PyPI

 一、添加模块映射

二、设置FastCGI映射的环境变量

三、关于wfastcgi-enable

四、【锁定冲突】打开web.config的设置锁


一、IIS的【处理程序映射(Handler Mapping)】中添加【模块映射(module mapping)】有多种方式,任选一种即可,例如:

1、在网站目录下添加 / 编辑 web.config 进行配置。(需执行wfastcgi-enable 通过GUI交互使配置生效)

2、在控制面板的IIS管理器,通过GUI交互界面进行配置。(此方式无需执行wfastcgi-enable)

3、编写脚本调用IIS管理工具appcmd.exe进行配置。(具体请自行百度)

先看看通过web.config方式进行配置(此例子中只配置单个site,不是对IIS全局做配置)。

把以下代码保存为web.config,放到网站根目录。

<?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <system.webServer>
            <handlers>
                <add name="Python FastCGI" 
                     path="*" 
                     verb="*" 
                     modules="FastCgiModule" 
                     scriptProcessor="<Path to Python>\python.exe|<Path to Python>\lib\site-packages\wfastcgi.py" 
                     resourceType="Unspecified" 
                     requireAccess="Script"/>
            </handlers>
        </system.webServer>
    </configuration>

 这里填写脚本解析器(python.exe)和wfastcgi.py的绝对路径 【解析器路径可以用python安装目录下的python.exe 也可以用python虚拟环境的python.exe,根据自己的情况选择即可】

ps:如果未执行过wfastcgi-enable,以上配置是未生效的。

============再看看通过IIS管理器GUI交互界面方式对一个网站配置fastcgi: 

ps:通过此界面操作,是不需要运行wfastcgi-enable的。也不需用设置“appcmd unlock config -section:system.webServer/handlers”

PS:此操作可以IIS主页的【处理程序映射】中进行,这样的话,配置就对IIS下所有网站都有效了。

======小结:两种方式是等效的========

如果配置后,出现以下错误:则是因为IIS的CGI还没有安装。解决方案:配置本地服务器--添加角色和功能--(服务器选择)--服务器角色--web服务器IIS--web服务器--应用程序开发--CGI

 =====  二、设置FastCGI映射的环境变量=======

若一台服务器的IIS上有多个网站,一般来说每个网站的环境变量是不一样的。所以wfastcgi-enable对全局设置FastCGI映射时,不包含【FastCGI环境变量】设置。

通过在网站根目录下的web.config,可以设置该网站的FastCGI环境变量。

1、在web.config上设置

<?xml version="1.0" encoding="UTF-8"?>
        <appSettings>
            <add key="WSGI_HANDLER" value="django.core.wsgi.get_wsgi_application()" />
            <add key="PYTHONPATH" value="<Path to Django App>" />
            <add key="DJANGO_SETTINGS_MODULE" value="<Django App>.settings" />
        </appSettings>
    </configuration>

  • <Path to Django App> 填写我们的项目路径。
  • <django App>  填写settings.py的位置。<django App>修改成我们的settings.py所在目录的目录名即可。

2、在GUI界面上配置

对于全局设置,可以直接在IIS设置的主页【FastCGI设置】中添加和设置。

对于单个site的设置,需要先在site的【处理程序映射】中添加【模块映射】后,再回到全局设置主页的【FastCGI设置】中找到site的那条模块映射,点击【编辑】进入设置界面。(IIS下全部任一个网站单独设置的【模块映射】都可以在【FastCGI设置】中找到的)

 

需要添加的变量有3个:
Name: WSGI_HANDLER
Value: django.core.wsgi.get_wsgi_application()

Django项目目录
Name: PYTHONPATH
Value: <Path to Django App>

项目settings.py文件的位置
Name: DJANGO_SETTINGS_MODULE
Value: <Django ProjectName> .settings

====  wfastcgi-enable ====

=========研究过程中,折腾了我最多时间的是wfastcgi-enable 这个命令。======

wfastcgi-enable 这个命令是不是多余的?为了搞明白这个问题,看了官方文档、看了源代码、研究了appcmd的用法、又在IIS上反复试验。

官方文档,说:

Once wfastcgi and IIS are installed, run wfastcgi-enable as an administrator to enable wfastcgi in the IIS configuration. This will configure a CGI application that can then be specified as a route handler.

看了这说明,我还以为运行了wfastcgi-enable后,IIS就有了python的fastcgi了。就不需要在web.config中添加<system.webServer><handlers><add ****/></handlers></system.webServer>这节了。但实际测试发现,wfastcgi-enable 后,IIS的 处理程序映射(Handler Mapping)中并没有对应的模块映射(Module Mapping),只是在FastCGI设置中多了一条记录。这有什么意义呢?

先说结论:

  • 意义:将wfastcgi添加到IIS的FastCGI集合中。(即相当于在IIS中启用wfastcgi)
  • 等价操作:以下对话框点击是

PS:如果仅仅在网站根目录创建了web.config,但没有进入IIS管理器中点开这个界面点击“是”,web.config中的模块映射是没有生效的,即使重启IIS或者重启网站都一样。

操作路径:IIS-->我的网站->处理程序映射->(双击)编辑模块映射 ->请求限制->确定->确定->确定。对应的配置就生效了。

其他试验过程:

阅读wfastcgi.py 的 def enable() 部分代码可知,它实际上是调用C:\Windows\System32\inetsrv下的appcmd.exe (通过脚本命令方式进行IIS配置的工具)

 为了验证,我在服务器上做了测试:

step 1 :执行wfastcgi-enable前,IIS关于fastcgi配置是这样的

 

或者直接在【fastcgi设置】中查看:

step 2 :安装wfastcgi,并执行wfastcgi-enable

 执行结果的提示内容也说得非常直白了:告诉你它具体做了什么使得FastCGI脚本处理器已经生效。

wfastcgi-enable
已经在配置提交路径“MACHINE/WEBROOT/APPHOST”向“MACHINE/WEBROOT/APPHOST”的“system.webServer/fastCgi”节应用了配置更改
"xxxx" can now be used as a FastCGI script processor

step 3: 这时候再检查一下IIS全局配置的内容,已经新增了一项FastCGI映射配置了

 

或者直接进入【fastcgi设置】

入口:

详情:

 step 4: 执行wfastcgi-disable,可以看到IIS全局配置中,对应的选项已经被移除。

 经过以上试验,我们可以知道 wfastcgi-enable 和 在控制面板的IIS管理器,通过GUI交互界面进行配置两种操作方式了。


以下再来看看

=====appcmd命令方式添加映射=====

1、添加Web Server下的FastCGI模块路径:

appcmd set config /section:system.webServer/fastCgi /+[fullPath='(python解释器绝对路径|参数))’]

2、在WebSite下添加模块映射的命令  【处理程序映射 叫 Handler Mapping】:

appcmd set config /section:system.webServer/handlers /+[name=’FastCGI’,path=’*’,verb=’*’,modules=’FastCgiModule’,scriptProcessor='(python解释器绝对路径|参数)’,resourceType='Unspecified'] 

=========其他=====

有教程说 “ 直接引用python\Lib\site-packages目录下的文件,不可以部署多个Django网站” “如果需要部署多个项目,就把“wfastcgi.py”文件从上面的路径中复制到Django项目的根目录下。” --->对此操作我表示质疑。

按我理解,无论IIS全局设置wfastcgi 还是 某个site或者某个目录设置wfastcgi,都完全可以用同一个解析器,同一个wfastcgi文件。把“wfastcgi.py”文件从上面的路径中复制到Django项目的根目录下是多此一举。

Q:一定要在服务器上 pip install wfastcgi 吗?不在服务器上pip install 而直接把本地的wfastcgi.py拷贝到服务器可以吗?

A:可以。

只是不pip install 的话,服务器上没有 wfastcgi-enable.exe 。相关配置需要通过网站目录下的web.config进行配置或者IIS管理器GUI界面完成配置。

Q:能否直接把本地的 wfastcgi-enable.exe 复制到服务器,然后运行它?

A:不能,因为在本地执行 pip install wfastcgi 时生成的 wfastcgi-enable.exe文件里面hardcode了一些绝对路径。直接复制到服务器上执行,会报错。

Q:wfastcgi-enable.exe 和 wfastcgi-disable.exe 分别做了 什么?

A:其实只是调用IIS配置工具appcmd.exe 执行添加/删除FastCGI映射的命令。

添加:appcmd set config /section:system.webServer/fastCgi /  +  [fullPath=xxx

删除:appcmd set config /section:system.webServer/fastCgi /  -  [fullPath=xxx

Q7:重启服务器或者重启IIS后,需要重新执行wfastcgi-enable吗?

A:不需要

========三、解锁web.config更改权限 ===========

 IIS出于安全考虑,对web.config的管理机制,默认情况下会锁住配置项不允许更改。我们把它解锁了

如果访问IIS出现如下错误

4.jpg

HTTP 错误 500.19 Internal Server Error

出现这样的情况是因为IIS7之后的版本都采用了更安全的 web.config 管理机制,默认情况下会锁住配置项不允许更改。我们把它解锁了就OK。

打开CMD,在里面依次输入下面两个命令:

%windir%\system32\inetsrv\appcmd unlock config -section:system.webServer/handlers 

%windir%\system32\inetsrv\appcmd unlock config -section:system.webServer/modules

5.jpg

 解除了锁定之后,再访问网站就能正常显示了

若要在GUI界面操作(这样修改完web.config后可以重新上锁)

参考:

https://www.django.cn/article/show-21.html

https://zhuanlan.zhihu.com/p/111822007 对应的视频为 https://www.bilibili.com/video/BV1bT4y1M7L2

https://blog.csdn.net/SongyaoLee/article/details/82914503

https://blog.csdn.net/elonpage/article/details/52645562

https://blog.csdn.net/weixin_29138345/article/details/113080327 (使用appcmd来自动化部署IIS网站)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/bigcarp/article/details/121028820

智能推荐

猫儿PDF-Word格式转换经验谈_pdf转换成分word之后叠加怎么办?-程序员宅基地

文章浏览阅读1.2k次。猫儿我最近工作遇到了万恶的格式转换问题PDF-Word。众位看官抢着说“这不是很简单嘛?”“你就用XX软件就可以了嘛!”事实果真如此么?今天准备了10款软件和1份PDF文档进行测评。 1.ABBYY FineReader11一个知名的俄罗斯ORC软件,拥有高超的识别技术。OCR (Optical Character Recognition,光学字符识别)是指电子设备(例如扫描仪或数_pdf转换成分word之后叠加怎么办?

hdu 3452 Bonsai(最小割)-程序员宅基地

文章浏览阅读912次。题意:给出一棵树,每条边又

Docker将从Kubernetes中移除,我该怎么办?_docker 删除kuboard-程序员宅基地

文章浏览阅读618次。文章目录Docker将从Kubernetes中移除,我该怎么办?对开发者而言对K8S管理员而言是真的吗?但是为什么 Docker 要被移除呢?CRI runtimescontainerdCRI-O还有一件事...CRI runtimesOCI runtimes附录一:runC 是如何工作的![在这里插入图片描述](https://img-blog.csdnimg.cn/20210429154504847.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5na_docker 删除kuboard

英特尔发布重大技术架构的改变和创新,面向CPU、GPU和IPU_处理器架构从哪些方面改进-程序员宅基地

文章浏览阅读4.2k次。在2021年英特尔架构日上,英特尔公司高级副总裁兼加速计算系统和图形事业部总经理Raja Koduri携手多位英特尔架构师,全面介绍了两种全新x86内核架构的详情;英特尔首个性能混合架构,代号“Alder Lake”,以及智能的英特尔硬件线程调度器;专为数据中心设计的下一代英特尔至强可扩展处理器Sapphire Rapids;基础设施处理器(IPU);即将推出的显卡架构,包括Xe HPG微架构和Xe HPC微架构,以及Alchemist SoC, Ponte Vecchio SoC。这些新架构将为._处理器架构从哪些方面改进

PointConv:基于3D点云的深度卷积网络_点云不能用卷积网络吗-程序员宅基地

文章浏览阅读3.8k次。原文首发于微信公众号「3D视觉工坊」——PointConv:基于3D点云的深度卷积网络本文出自知乎:https://zhuanlan.zhihu.com/p/69597887?utm_source=wechat_session&utm_medium=social&utm_oi=1135649954939883520原文:PointConv: Deep Convol..._点云不能用卷积网络吗

遥感影像镶嵌拼接_qmosaic-程序员宅基地

文章浏览阅读8.6k次,点赞3次,收藏34次。软件下载地址:https://pan.baidu.com/s/1dt0yDUsAork9LnLnZTwCgw需要百度网盘下载密码,留言邮箱地址。或联系联系QQ:1257396288​首先加载需要处理的影像,如下所示:然后点击菜单栏中的“生成镶嵌线”,具体参数设置如下:1.自动生成镶嵌线点击“生成镶嵌线”按钮,弹出如下对话框:处理方式:分..._qmosaic

随便推点

ios底部安全距离-程序员宅基地

文章浏览阅读6.9k次,点赞4次,收藏14次。背景: 目前公司开发商城小程序,对于iOS要设置底部安全距离,否则底部会被黑条遮挡技术方案:1、苹果官方推荐:使用env(),constant()来适配,env()和constant(),是IOS11新增特性,Webkit的css函数,用于设定安全区域与边界的距离,有4个预定义变量: safe-area-inset-left:安全区域距离左边边界的距离 safe-area-inset-right:安全区域距离右边边界的距离 safe-area...

第十五课.马尔科夫链蒙特卡洛方法_马尔可夫链是哪门课-程序员宅基地

文章浏览阅读438次。目录M-H采样Metropolis-Hastings采样原理M-H采样步骤Gibbs方法Gibbs核心流程Gibbs采样的合理性证明Gibbs采样实验在第十四课中讲述了马尔科夫链与其稳态的性质,本篇讨论基于马尔科夫链蒙特卡洛(MCMC)方法的采样。M-H采样Metropolis-Hastings采样原理我们的目标分布是p(z)p(z)p(z),同时我们手里有一个便于随时间进行遍历的马尔科夫链,其状态转移矩阵为QQQ。为了便于在马尔科夫链上随时间进行状态转移,这里的矩阵QQQ设计为:Qij=P(x_马尔可夫链是哪门课

mac os 快捷键_mac扩展模式快捷键 site:blog.csdn.net-程序员宅基地

文章浏览阅读550次。要使用键盘快捷键或组合键,您可以同时按修饰键和字符键。例如,同时按下 Command 键(标有 符号的按键)和“c”键会将当前选中的任何内容(文本、图形等等)拷贝至夹纸板。这也称作 Command-C 组合键(或键盘快捷键)。许多组合键中都包含修饰键。修饰键将改变 Mac OS X 对其他按键或鼠标点按动作的解释方式。修饰键包括 Command、Control、Option、Shif_mac扩展模式快捷键 site:blog.csdn.net

mysql collation 选哪个_mysql新建数据库时的collation选择(转)-程序员宅基地

文章浏览阅读649次。转自:https://www.cnblogs.com/sonofelice/p/6432986.htmlmysql新建数据库时的collation选择(转)转自别处的文章。末尾附原文链接mysql的collation大致的意思就是字符序。首先字符本来是不分大小的,那么对字符的>, = , < 操作就需要有个字符序的规则。collation做的就是这个事情,你可以对表进行字符序的设置,也..._mysql collate选择那种号

2020-08-24_"</span><span dir=\"ltr\" style=\"font-style: norm-程序员宅基地

文章浏览阅读139次。1.1基本概念CSS(Cascading Style Sheet) 层叠样式表,为了实现页面内容和表现形式的分离。层叠的含义是可以对一个元素多次设置样式,最后的结果是多次样式叠加的结果,如果有冲突,以后面的样式为准。1.2 基本语法选择器{属性名1:属性值1;属性名2:属性值2;属性名3:属性值3;……}选择器说明该样式施加于哪些元素;属性名和属性值说明是样式内容;一般一行定义一条样式,当然也可以写在一行上,但每条样式都序号加上“;”推荐用小写命名。<_"

【观察】解读Kyligence智能数据云战略,打造新一代数据管理“底座”-程序员宅基地

文章浏览阅读249次。申耀的科技观察读懂科技,赢取未来!众所周知,随着云计算、大数据、人工智能、物联网等新技术在各行各业更加广泛的普及与应用,在催生越来越多数据量产生的同时,也让数据的管理和价值挖掘变得愈加复杂..._kyligence

推荐文章

热门文章

相关标签