Windows + Flask + Apache + wsgi踏坑總結

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

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

相關文章
相關標籤/搜索