據前人踏坑經歷,拷貝以下:
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