基於Linux環境搭建Nginx+uWSGI+Python框架方法介紹

前言

瀏覽器上網的過程簡單來講便是瀏覽器從服務器中獲取網站信息,通過渲染後將效果呈現給用戶。這裏側重介紹下在幕後默默工做着的服務器。
Web服務器是運行在物理服務器上的一個程序,永久地等待客戶端(主要是瀏覽器,好比Chrome,Firefox等)發送請求。Web服務器經過HTTP協議與客戶端通訊,當收到請求以後,若是是靜態文件的話Web服務器可直接返回,若是不是靜態文件的話須要有一個Web應用服務器根據不一樣的請求處理對應的業務邏輯生成相應的響應,以下圖所示。html

圖片描述

目前在UNIX和LINUX平臺下使用最普遍的免費Web服務器有Apache和Nginx。Nginx是高效的Web服務器和反向代理服務器,能夠用做負載均衡,與Apache相比,Nginx支持高併發,能夠支持百萬級的TCP鏈接,十萬級別的併發鏈接,部署簡單,內存消耗少,成本低,雖然動態請求處理沒有Apache豐富,但Nginx支持uWSGI的uwsgi協議,可將動態請求傳遞至uWSGI處理。python

這裏選擇使用Nginx和uWSGI相結合的應用,因爲Nginx是反向代理服務器,所以須要網絡上的Web應用服務器uWSGI負責具體的應用邏輯處理,雖然uWSGI也能夠做爲Web服務器應用在小規模網站,但配合Nginx使用能夠更好的利用Nginx在緩存、併發處理,安全防禦,日誌等方面的強大功能。
圖片描述nginx

下面就來介紹下如何搭建Nginx+uWSGI環境來運行Python應用。web


Nginx服務器部署

下載源碼庫。Nginx服務器的安裝依託於openssl、zlib、pcre庫的支持,在安裝Nginx以前須要對這三個庫進行安裝,如下提供各個源碼庫的下載地址:
(1)openssl-fips-2.0.2.tar.gz(安全通信庫)https://www.openssl.org/source/
(2)zlib-1.2.7.tar.gz(數據壓縮庫)http://www.zlib.net/
(3)pcre-8.21.tar.gz(正則表達式庫)http://www.pcre.org
(4)nginx-1.2.6.tar.gz http://nginx.org/en/download....正則表達式

安裝源碼庫。在Shell終端界面中輸入Linux命令執行安裝。涉及到普通用戶執行root命令時權限不足的問題,可在命令前增長sudo指令解決。執行安裝分爲如下幾步:
(1)解壓文件。tar zxvf openssl-fips-2.0.2.tar.gz
(2)進入至存儲的文件夾路徑。cd openssl-fips-2.0.2
(3)運行shell配置腳本檢測運行環境,生成makefile文件。./configure(Nginx的配置腳本須要結合依託庫運行:./configure --with-pcre=../pcre-8.21 --with-zlib=../zlib-1.2.7 --with-openssl=../openssl-fips-2.0.2)shell

若運行環境不知足,如運行pcre配置文件時提示「configure: error: You need a C++ compiler for C++ support」,即缺乏C++編譯器,那麼須要安裝C++編譯器「sudo apt-get install g++」

(4)編譯源碼庫:make
(5)安裝源碼庫:make instaljson

執行測試命令:./nginx -t(在/usr/local/nginx/sbin路徑下執行),出現以下提示表示已經安裝成功瀏覽器

圖片描述

啓動/中止服務器緩存

(1)執行啓動命令:./nginx。啓動後在瀏覽器輸入http://localhost:80監聽本機80端口,出現以下圖所示內容,表示已經成功啓動nginx服務器
圖片描述安全

(2)執行查看端口命令:netstat -ntlp
圖片描述

(3)篩選出nginx進程並打印:ps -ef|grep nginx
圖片描述

(4)Kill進程ID方式退出nginx進程:kill -QUIT
圖片描述


uWSGI服務器部署

在介紹uWSGI服務器部署前,先梳理uwsgi、uWSGI、WSGI的區別:

WSGI(Web Server Gateway Interface)是爲Python語言定義的Web服務器和Web應用程序或框架之間的一種簡單而通用的接口協議,只要web服務器和 web應用都遵照WSGI協議,那麼二者之間就能夠任意組合。
uwsgi是基於二進制的線路協議,與WSGI協議做用相同,但屬於uWSGI服務器自有協議
uWSGI是Web服務器,它實現了WSGI協議、uwsgi、http等協議

安裝uWSGI。此處經過pip安裝,也能夠下載源碼進行安裝。

pip install uwsgi

Python編寫應用程序server.py,在網頁上顯示「Hello World」,代碼以下:

def application(environ, start_response):
    status = '200 OK'
    output = 'Hello World!'

    response_headers = [('Content-type', 'text/plain'),
                        ('Content-Length', str(len(output)))]
    start_response(status, response_headers)
    return [output]

啓動uWSGI服務器。可經過命令方式啓動uWSGI,也能夠將參數寫在配置文件中(inixmljsonyaml),指定配置文件來啓動uWSGI(命令「uwsgi myapp.ini」)。

sudo uwsgi --http-socket :8001 --plugin python --wsgi-file server.py --master --processes 4 --threads 2 --stats 127.0.0.1:9191
--http-socket參數指定了HTTP監聽地址和端口,
--wsgi-file參數指定了WSGI應用程序入口,uWSGI會自動搜尋名爲」application」的應用對象並調用它。
--plugin python參數指定uWSGI 使用 python 插件去解析文件
--master 參數配置主進程
--processes 參數配置多進程
--threads參數配置多線程
--stats 參數配置在指定地址訪問狀態信息,以下圖在」127.0.0.1:9191″獲取JSON格式的運行信息
圖片描述

配置文件內容以下:
[uwsgi]
http-socket=:8001
plugins = python
wsgi-file=server.py
master=true
processes=4
threads=2
stats=127.0.0.1:9191

瀏覽器URL輸入」http://localhost:8001″,能夠訪問到server.py執行的結果」Hello World!」

圖片描述

更多關於uWSGI的介紹可參考官網文檔:http://uwsgi-docs.readthedocs...

Nginx+uWSGI反向代理

Ngx_http_uwsgi_module模塊起到Nginx服務器與uWSGI服務器交互做用,經過對uwsgi_pass設置服務器地址和協議,可將動態內容傳遞至uWSGI處理。

配置uWSGI。將uWSGI的HTTP端口監聽改成socket端口監聽,即配置文件中的「http-socket」項改成「socket」項。

[uwsgi]
socket=127.0.0.1:3031
plugins = python
wsgi-file=server.py
master=true
processes=4
threads=2
stats=127.0.0.1:9191

配置Nginx。打開Nginx的配置文件nginx.conf(Ubuntu上路徑「/usr/local/nginx/conf」),須要執行「sudo chmod -R 777 nginx.conf」下降配置文件權限纔可對服務器相關屬性進行配置

配置代碼以下:
    server {  
        listen       80;  
        server_name  localhost;  
        location / {  
    #root   html;
    #index  index.html index.htm;
        include uwsgi_params;#加載uWSGI配置參數
        uwsgi_pass 127.0.0.1:3031;#請求轉發至」127.0.0.1:3031″端口上,即uWSGI服務器
               }  
        } 

啓動uWSGI服務器和nginx服務器,再次訪問」http://localhost:80」時會看到python應用程序返回「Hello World!」,表示已經完成nginx服務器對uWSGI服務器的反向代理功能。

sudo /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
 sudo service nginx restart$ uwsgi myapp.ini
相關文章
相關標籤/搜索