据前人踏坑经历,拷贝以下:
1. Apache,mod_wsgi和Python都必须用相同版本的C/C++编译器生成,要么都是32位的,要么都是64位的,不能混用。
2. Apache和mod_wsgi 也必须选择相同位数相同VC编译版本(好比:都是x64 VC14编译)
本人以x64 VC14编译版本为例,python
Windows版本: Window Server 2008 R2 x64web
Python: 3.7.2 x64apache
1. 首先安装Python环境,安装python3.7.2 x64版本flask
下载地址:https://www.python.org/ftp/python/3.7.2/python-3.7.2-amd64.exeapp
验证一下,是否安装成功:测试
2. 安装Flaskui
3. 安装Apachespa
打开网页: https://httpd.apache.org命令行
这里必定必定要选对版本,我这里选的x64, vc14版本3d
下载后,将文件解压出来,如图所示:
命令行启动httpd.exe,并验证是否启动成功,显示"IT WORKS", 没有问题
4. 安装mod_wsgi
在https://www.lfd.uci.edu/~gohlke/pythonlibs/ 页面搜索 mod_wsgi, 而且必定要选对版本,个人版本是vc14+py37+x64版本
将下载的文件后缀改成zip,解压出来,拷贝mod_wsgi.cp37-win_amd64.pyd 文件放到C:\Apache24\modules 目录,并更名为mod_wsgi.pyd
5. 修改配置
搜索SRVROOT 并修改apache的路径, apache配置文件:C:\Apache24\conf\httpd.conf
加载mod_wsgi模块,增长行 LoadModule wsgi_module modules/mod_wsgi.pyd
建立web app
main.py 代码:
from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello World!' @app.route("/index/") def foo(): return "index page" @app.route("/login/") def login(): return "login page" if __name__ == '__main__': app.run()
test.wsgi代码:
import sys sys.path.insert(0, "C:/web") from main import app application = app
修改httpd.conf配置,末尾增长内容:
<VirtualHost *:8090 > ServerAdmin "0.0.0.0" DocumentRoot "c:/web" <Directory "c:/web"> Require all granted Require host ip Allow from all </Directory> WSGIScriptAlias / c:/web/test.wsgi </VirtualHost>
搜索Listen,监听端口改成8090
再次启动httpd,可能会出现如下错误:
以上错误是因为httpd.conf中某些模块没有启用,启用如下模块便可:
LoadModule access_compat_module modules/mod_access_compat.so #基于主机的组受权(名称或IP地址) httpd 2.x兼容的模块, LoadModule proxy_module modules/mod_proxy.so #apache的代理模块 LoadModule proxy_http_module modules/mod_proxy_http.so #代理http和https请求 LoadModule vhost_alias_module modules/mod_vhost_alias.so #虚拟主机动态配置 LoadModule authz_host_module modules/mod_authz_host.so #基于主机的组受权 Include conf/extra/httpd-vhosts.conf#启用虚拟主机配置
若是上述步骤都没有问题,测试一下结果:
公网访问试试:
OK,至此,配置算是圆满成功!
本文发布于:2019-03-04 21:55:55