Window sever服务器通过IIS和FastCGI部署 python flask框架

Window sever 通过IIS和FastCGI部署 python flask框架

研究了一晚上,终于把flask部署到window 服务器上了。踩了无数坑,这里说一下

主要遇到的问题
  • 网上目前大部分教程都是Linux部署,但是很多小白完全会被Linux绕晕
  • window很多人采用的是Apache作为服务器,但是这个必须要下载对应版本的VC, mod_wsgi 和python,很麻烦,小白通过这中方式一般都会失败,我页失败了,猜想原因是版本不一致
  • 也有人通过iis+wfastcgi部署的,方向是对的,但是发现很多教程编写年代久远,wfastcgi的版本和iis版本以及python版本都有限制,我记得官方给的python版本必须是3.4,导致其他版本会报错。
  • web.config文件会报错之类的
  • 正常部署好之后,服务器内网ip能访问,但是外网ip访问不了的情况
  • (其他报错情况我会在文末贴出)
接下来我大概讲解一下web服务器的运作原理(可以跳过)

画了涨图
Web服务器的运作原理

Web服务器层。Web服务器的主要作用就是接收请求 、处理请求、返回响应。比如:Nginx,Apache,IIS等,我本次用的就是window自带的IIS,因为不用单独下载很方便,开启方法可以参考:Window sever IIS(Internet Information Services (IIS)管理器)设置方法
Web框架层。Web框架的作用主要是方便我们开发 web应用程序,HTTP请求的动态数据就是由 web框架层来提供的。比如:Django、Flask等,我本次用的是Flask。
WSGI层。WSGI 不是服务器,也不是用于与程序交互的API,只是一种接口,它只适用于 Python 语言,其全称为 Web Server Gateway Interface,定义了 web服务器和 web应用之间的接口规范。也就是说,只要 web服务器和 web应用都遵守WSGI协议,那么 web服务器和 web应用就可以随意的组合。

好了我们开始
第一步创建简单的Flask app框架
from flask import Flask

app = Flask(__name__)

@app.route('/')
def index():
    return 'Hello World 2021  tai bu rong yi le hhhhhh'

if __name__ == '__main__':
    app.run(debug=True)

注意:一定要通过pycharm或者vscode之类的IDE运行,不然会报错use a production wsgi server instead。
如果正常启动,就欧克

第二步设置IIS

Window sever IIS(Internet Information Services (IIS)管理器)设置方法

第三步下载并部署wfastcgi.py
pip install wfastcgi

下载完成python根目录会出现
在这里插入图片描述
注意:不要用命令行直接去目录运行这个wfastcgi-enable.exe文件,一般肯定报错,因为你的IIS版本以及python版本都不符合这个文件的要求(要求iis 7.5以上,python3.4)。解决方法如下:

  • 找到C:\Program Files\Python38\Lib\site-packages这个路径(自己替换一下)

在这里插入图片描述

  • 把这个wfastcgi.py复制到你的Flaskapp.py一个目录
第三步创建IIS站点

1、在这里插入图片描述2、在这里插入图片描述在这里插入图片描述所有都设置玩直接点击OK就行了

第四步 设置映射关系

先找到你刚刚新建的web站点,点击后,再找到映射设置,就是下图顺序
在这里插入图片描述添加映射,按照如图填写后需要点击那个链接限制进行设置
在这里插入图片描述在这里插入图片描述

第五步fastCGI设置

在这里插入图片描述在这里插入图片描述这里添加键值对参数:

WSGI_HANDLER :testFlask.app
PYTHONPATH :~/
如果项目名字不一样自己灵活改一下

在这里插入图片描述

第六步:配置web.config文件

这里自己鼓捣一下吧,看着要改的地方,按照规律改一下,其实就是刚才配置的哪些东西,懒得打字了,如果弄不好,可以评论或者私聊我

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

  <system.webServer>

    <handlers>
    	<add name="testFlask" path="*" verb="*" modules="FastCgiModule" scriptProcessor="C:\Program Files\Python38\python.exe|&quot;C:\Users\Administrator\Desktop\File\websit\wfastcgi.py&quot;" resourceType="Unspecified" requireAccess="Script" />
    </handlers>

    <security> 
        <requestFiltering allowDoubleEscaping="true"></requestFiltering> 
    </security>

        <directoryBrowse enabled="false" /> 
  </system.webServer>

  <appSettings>
    <!-- Required settings -->
    <add key="WSGI_HANDLER" value="testFlask.app" />
    <add key="PYTHONPATH" value="~/" />

    <!-- Optional settings -->
    <!-- add key="WSGI_LOG" value="C:\Users\Administrator\Desktop\File\weblog.log" -->
    <!-- add key="WSGI_RESTART_FILE_REGEX" value="~/" -->
  </appSettings>
</configuration>


这个文件配置好之后要和项目文件放一起,如图:
在这里插入图片描述

第七步:检验一下内网和外网能不能访问了

首先是内网:可以
在这里插入图片描述
然后外网:我这里也可(但是这里有坑)
在这里插入图片描述
如果你报错外网访问不了主要有两个原因:

  1. 你的云服务的防火墙给限制了不让你现在的端口访问
  2. 你的浏览器给你把你拦下了,一般显示:此地址访问受限 此地址使用了一个通常应该用于其他网页浏览的端口

第一个问题的解决办法是:去你云服务器控制台把端口打开,我这里暴力一点把所有端口都开放了
在这里插入图片描述第二个问题的解决办法参考这个:

在Firefox地址栏输入about:config,然后在右键新建一个字符串键network.security.ports.banned.override,将需访问网站的端口号添加到,值就是那个端口号即可。
如有多个,就半角逗号隔开,例:81,88,98
在能保证安全的前提下,还简化成这样写0-65535。这样,就可以浏览任意端口的网站了
火狐浏览器地址访问受限解决办法

好了。到此你的网站就可以像正常那样访问了,之后再不断往你的网站中添加其他模块了

累死我了

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值