Loading... 熟悉 python 的 flask 框架的朋友都知道,flask 默认的端口是 5000。你也可以自己定义其他的可用的端口。 但在生产环境给用户使用的时候,如果输入个网址还需要在域名后面输入个端口号,怎么看都觉得不够高大上,让我感觉很想解决这个问题,遍寻各种资料并自己尝试后,终于实现了。 本文适用于 win server 服务器的部署,如果你是用 win10 等部署的,部分内容有些许不同,看着办就好了。 欢迎找我交流。 现在把相关的步骤教给大家: #### 一、系统环境 windows server 2019 python 3.6.6(虚拟环境)(别的版本应该也行) flask(后面安装) wfastcgi(后面安装) #### 二、安装 IIS 和 CGI win server 系统是默认安装好 IIS 的,如果你是 win10 等则需要安装一下 IIS。打开服务器管理器,选择添加角色和功能。 ![flask80-1.jpg](http://static.fox-9.com/uploads/2021/08/19/flask80-1.jpg!webp) 前面的默认往前进,可以找到这个目录部分。好像发现 CGI 默认是安装好了的。 ![flask80-2.jpg](http://static.fox-9.com/uploads/2021/08/19/flask80-2.jpg!webp) 如果没有安装,往下步骤安装就好了。 #### 三、安装 URL 重写组件 (我的服务器过去安装有,所以无需安装,也不能百分百确认到底要不要这一步,后面我没有用到它)以下是摘录别人的下载安装说明: IIS 需要安装 URL 重写组件,这个可以通过 [Microsoft Web Platform Installer](https://www.microsoft.com/web/downloads/platform.aspx) 来安装。下载 [Microsoft Web Platform Installer](https://www.microsoft.com/web/downloads/platform.aspx) 后运行,搜索 `url`,分别安装。 ![flask80-3.png](http://static.fox-9.com/uploads/2021/08/19/flask80-3.png!webp) #### 四、创建 python 虚拟环境 (这一步不是必须的,如果你为了让你的 flask 运行的 python 环境比较纯净,则可以使用虚拟环境,本文不讲细节,以后我会单独写一篇总结文章来写这个细节)由于是 win 环境,则在系统预先安装好的 python 基础上安装虚拟环境的包: `pip install virtualenv` `pip install virtualenvwrapper-win` 然后在系统环境变量配置好虚拟环境的存放目录: ![flask80-4.jpg](http://static.fox-9.com/uploads/2021/08/19/flask80-4.jpg!webp) 然后用管理员模式运行 cmd,运行命令创建虚拟环境: `mkvirtual flask_test` 创建一个名字为 flask_test 的虚拟环境空间,使用系统安装的默认 python 版本 3.6.6。 此时会自动进入虚拟空间,你也可以在平常输入如下命令进入: `workon flask_test` 此时安装的 pip 包啊什么的都只是在这个虚拟环境中安装了。 这里我们不细讲。 #### 五、安装 flask 和 wfastcgi 接下来安装 flask 和 wfastcgi。分别运行命令安装即可: `pip install flask` `pip install wfastcgi` 其实本质用的是 wfastcgi 这个功能包来实现。 安装完之后,可以通过 cmd 来到你使用来解析的 python 的 scripts 目录下,运行如下命令: `wfastcgi-enable` 此时会返回相关内容: ![flask80-5.jpg](http://static.fox-9.com/uploads/2021/08/19/flask80-5.jpg!webp) 其中需要特别注意一下你那里返回的框出来的双引号的内容,这个在后面的配置中会用到,不同电脑的人不同。 **你可以把引号中间的内容保存到文本文件,这个 cmd 窗口就可以先关闭了。后面网站正式运行之后,你不需要像平常启动 flask 网站那样启动,也不用打开 cmd 窗口或进入虚拟环境启用。** 如果你运行这个命令,看到什么 ERROR 这样的字符报错,可以先运行一下 `wfastcgi-disable` 这个命令先禁用,再运行上述命令启用。 #### 六、配置你的服务器解析 由于我们的最终目的是实现外网的用户仅输入域名,不需要添加端口号就可以实现网站的访问,所以需要进行解析 DNS 的规则配置。到你的 DNS 供应商配置一条 A 记录,比如我配置的主机记录是 flask,即全称域名为:`http://flask.xueshanlinghu.com`。而指向的 IP 地址是自己的外网 IP 地址即可。 #### 七、准备好你的 flask 站点源码 因为在测试嘛,所以就写一个最简单的 flask 站点好了。找一个文件夹,作为网站的运行目录,并在里面创建一个 python 文件,名字为 `hello.py`。 源码如下: ```python # coding:utf-8 from flask import Flask app = Flask(__name__) @app.route("/") def index(): return "hello flask python" if __name__ == "__main__": app.run(debug=True) ``` 这样,启动网站首页之后,就会看到内容 “hello flask python”。 #### 八、编写 web.config 文件 由于是 IIS 服务器,所以需要编写一个服务器的配置文件,按照我前面的内容,配置参考如下(你需要根据自己的情况改成自己的):**其中 scriptProcessor 需要改成你刚才启用 wfastcgi 的时候返回的内容。** **WSGI_LOG 这个的目录,一定要创建好!!!后面配置的日志路径如果没有配置则会报错的,比如我返回的就是 500 错误。** **WSGI_HANDLER 这个的值目前我还不是很确定应该怎么填写,尝试过修改为 hello2.app 好像也能用。所以这块需要再研究下。** ```xml <?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <handlers> <!-- scriptProcessor 的值来自命令行工具 wfastcgi-enable --> <add name="FlaskFastCGI" path="*" verb="*" modules="FastCgiModule" scriptProcessor="d:\programs\virtualpython\flask_test\scripts\python.exe|d:\programs\virtualpython\flask_test\lib\site-packages\wfastcgi.py" resourceType="Unspecified" requireAccess="Script" /> </handlers> <security> <!-- URL 重写中的特殊字符,比如加号+等等 --> <requestFiltering allowDoubleEscaping="true"></requestFiltering> </security> </system.webServer> <appSettings> <!-- Required settings --> <!-- 在这里指定Falsk app在模块中的具体位置 --> <add key="WSGI_HANDLER" value="hello.app" /> <add key="PYTHONPATH" value="~/" /> <!-- Optional settings --> <!-- 需要先创建日志目录,否则报错 --> <add key="WSGI_LOG" value="D:\logs\oboeqa_web.log" /> <add key="WSGI_RESTART_FILE_REGEX" value="" /> </appSettings> </configuration> ``` 写好之后保存为 `web.config` 文件,放在网站根目录下。 #### 九、IIS 添加网站 经过了前面的各种准备工作,终于到添加网站这一步啦!接下来还是打开 “服务器管理器”,在右上角选择 “工具” 菜单栏,选择 “Internet Information Services (IIS) 管理器” 进入 IIS 的管理器。 左侧找到网站,右键,选择添加网站。 ![flask80-6.jpg](http://static.fox-9.com/uploads/2021/08/19/flask80-6.jpg!webp) 然后在弹出的窗口中填写好如下所示的内容: ![flask80-7.jpg](http://static.fox-9.com/uploads/2021/08/19/flask80-7.jpg!webp) 网站名称是网站显示给你看的名字,你可以改成别的。 物理路径,选择刚才我们存放 flask 网站的那个目录。 端口啥的默认就有,不用管,我们就是想要 80 端口,所以不用改。 主机名应该是填写的访问的域名,所以我就填写了。 填写完成后,点击确定,启动网站。 此时,在外网输入网址:`http://flask.xueshanlinghu.com` 发现已经能够不输入端口号访问啦!大功告成! ![flask80-8.jpg](http://static.fox-9.com/uploads/2021/08/19/flask80-8.jpg!webp) 当然,这仅仅是测试用的,发完本文,这个网址可是无法访问的。大家不用测试嘿嘿。请用自己的服务器来测试吧! 希望能帮到大家! 如果有什么别的想法,欢迎评论或找我交流。 最后修改:2021 年 08 月 19 日 © 允许规范转载 赞 赠人玫瑰,手留余香