據前人踏坑經歷,拷貝如下:
1. Apache,mod_wsgi和Python都必須用相同版本的C/C++編譯器生成,要么都是32位的,要么都是64位的,不能混用。
2. Apache和mod_wsgi 也必須選擇相同位數相同VC編譯版本(比如:都是x64 VC14編譯)
本人以x64 VC14編譯版本為例,
Windows版本: Window Server 2008 R2 x64
Python: 3.7.2 x64
1. 首先安裝Python環境,安裝python3.7.2 x64版本
下載地址:https://www.python.org/ftp/python/3.7.2/python-3.7.2-amd64.exe

驗證一下,是否安裝成功:

2. 安裝Flask


3. 安裝Apache
打開網頁: https://httpd.apache.org



這里一定一定要選對版本,我這里選的x64, vc14版本

下載后,將文件解壓出來,如圖所示:

命令行啟動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
