Windows + Flask + Apache + wsgi踏坑總結


據前人踏坑經歷,拷貝如下:

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM