nginx+uwsgi+flask 伺服器配置

李路平發表於2018-05-25

注:每個機器,軟體版本可能不一樣,雖然網上有很多類似的帖子,但是我在搭建的時候遇到了不少的坑,此文僅供參考。

請求流程:

 

1、安裝uwsgi

uwsgi是一個應用伺服器,非靜態檔案的網路請求就必須通過他完成,他也可以充當靜態檔案伺服器,但不是他的強項。uwsgi是使用python編寫的,因此通過`pip install uwsgi`就可以了。(uwsgi必須安裝在系統級別的Python環境中,不要安裝到虛擬環境中)。

pip install uwsgi

測試uwsgi是否安裝正確:建立一個test.py的測試檔案

# test.py
def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return [b"Hello World"] # python3
    #return ["Hello World"] # python2

啟動uwsgi服務:

uwsgi --http :8000 --wsgi-file test.py

訪問頁面可以看到 Hello World ,標識uwsgi安裝成功。

2、安裝nginx

nginx是一個web伺服器。用來載入靜態檔案和接收http請求的。

yum install nginx

預設安裝完nginx是不會自動啟動的:常用命令:

* 啟動nginx:service nginx start
* 關閉nginx:service nginx stop
* 重啟nginx:service nginx restart

nginx預設埠為80埠,瀏覽器訪問地址看到如下顯示則標識nginx安裝成功了。

——修改nginx預設的80埠。

找到default.conf配置檔案

直接修改對於埠就行了,修改完畢之後記得重啟nginx生效。

 

3、配置uwsgi

在專案根目錄建立***_uwsgi.ini 檔案,基礎配置資訊如下

[uwsgi]
chdir=/srv/cms           # 專案根目錄
module=manage         # 專案啟動指令碼名字
wsgi-file=/srv/cms/manage.py      # flask啟動指令碼的具體檔案
callable=app        # 程式內的application變數名
home=/root/.virtualenvs/cms-env-py3      # 虛擬環境的具體路徑
socket=127.0.0.1:5001        # socket 協議,用於和nginx通訊
deamonize=/srv/cms/logs/cms-uwsgi.log        # 日誌檔案

master=true       # 主程式
processes=2       # 最大工作程式
threads=1        # 執行緒數量

關於socket和http的差別。從概念上來說,socket本身不是協議而是一種具體的TCP/IP實現方式,而HTTP是一種協議且基於TCP/IP。具體到這個配置這裡來,如果我只配了socket = 127.0.0.1:5001的話,通過瀏覽器或者其他HTTP手段是無法成功訪問的。而在uwsgi這邊的日誌裡會提示請求包的長度超過了最大固定長度。另一方面,如果配置的是http = 127.0.0.1:5001的話,那麼就可以直接通過一般的http手段來訪問到目標。但這會引起nginx無法正常工作。

正確的做法應該是:

如果有nginx在uwsgi之前作為代理的話應該配socket   如:  socket=127.0.0.1:5001

而如果想讓請求直接甩給uwsgi的話那麼就要配http。  如:  http=127.0.0.1:5001

 

4、配置nginx

進入nginx的conf.d路徑新建一個**.conf的配置檔案。

配置資訊如下:

server {
    # 監聽埠
    listen      5000;
    # 允許訪問的域名或IP,本機IP
    server_name 10.0.36.112;
    charset     utf-8;
    access_log /srv/cms/logs/access.log;     # 日誌檔案
    error_log /srv/cms/logs/error.log;      #  錯誤日誌檔案

    # 最大上傳檔案大小
    client_max_body_size 75M;

    # 靜態檔案URL
    location /static {
        # 檔案路徑
        alias /srv/cms/static;
    }

    # 非靜態檔案伺服器
    location / {
    include uwsgi_params;  # 引入uwsgi配置
        uwsgi_pass 127.0.0.1:5001;    # uwsgi的配置檔案裡的socket對應

        uwsgi_param UWSGI_CHDIR /srv/cms;      # 專案根路徑
        uwsgi_param UWSGI_SCRIPT manage:app;    # 啟動的主程式
    }
}

檢查配置檔案是否正常

# ervice nginx configtest 

 

5、啟動nginx服務

# service nginx start

 

6、啟動uwsgi服務

# uwsgi --ini cms_uwsgi.ini

 

到這裡,伺服器搭建完成。

備註:

uwsgi 常用命令:

uwsgi --ini cms_uwsgi.ini    //啟動
  
uwsgi  cms_uwsgi.ini   --deamonize //後臺執行啟動  
  
uwsgi --stop uwsgi.pid  //停止服務  
  
uwsgi --reload uwsgi.pid  //可以無縫重啟服務 

 nginx+uwsgi+flask成功執行了。

 

相關文章