1. 程式人生 > >Nginx+uWSGI啟動Django

Nginx+uWSGI啟動Django

src 標識 erro 好處 -m web應用 mil 請求 圖片

在之前的幾篇博客中對Django的功能做了初步總結,這裏鏈接貼一下:

Django的安裝和啟動

Django之--網頁展示Hello World!

Django之--通過MVC架構的html模板展示Hello World!

Django之--MVC的Model

Django之--POST方法處理表單請求

Django之--模板加載圖片

到這裏基本的測試暫時告一段落,但是在實際開發中是不可能用python manage.py runserver這種方式啟動web server的,因此接下來測試如何使用uwsgi+nginx的方式啟動Django。

一、安裝uWSGI和Nginx

pip3.6 install uwsgi
yum -y install nginx

WSGI / uwsgi / uWSGI 這三個概念的區別:(引用自:http://www.cnblogs.com/alex3714/p/6538374.html)

WSGI是一種Web服務器網關接口。它是一個Web服務器(如nginx,uWSGI等服務器)與web應用(如用Flask框架寫的程序)通信的一種規範。 uwsgi是一種線路協議而不是通信協議,在此常用於在uWSGI服務器與其他網絡服務器的數據通信。 而uWSGI是實現了uwsgi和WSGI兩種協議的Web服務器。 uwsgi協議是一個uWSGI服務器自有的協議,它用於定義傳輸信息的類型(type of information),每一個uwsgi packet前4byte為傳輸信息類型描述,它與WSGI相比是兩樣東西。

二、為uWSGI編寫配置文件

vi /etc/uwsgi.ini

[uwsgi]
chdir=/root/Django/mysite/  --即網站根目錄。
module=mysite.wsgi:application  --標識app位置。
static-map=/static=/root/Django/mysite/static  --表示模板引用的靜態文件的目錄,使用圖片時必須設置。
socket=192.168.1.193:8000  --用於接收nginx請求的socket,可以是文件,而且建議是文件,這裏懶的改了。
master = true    
vhost = true      
no-site = true     
workers = 2         
reload-mercy = 10     
vacuum = true        
max-requests = 1000   
limit-as = 512
buffer-size = 30000
pidfile = /var/run/uwsgi.pid
daemonize = /tmp/uwsgi.log  --uWSGI日誌,安裝uwsgi調試時有用。

三、修改Nginx配置文件

upstream部分一般用於配置負載均衡,這裏就不寫了。

server {
    listen       80 default_server;  --表示監聽80端口,我們最後也通過訪問此端口來訪問網站的。
    listen       [::]:80 default_server;
    server_name  192.168.1.193;  #定義server訪問名,表示只處理此訪問名的請求,如果不設置會默認當前第一個server域,因此不設置也行。
    access_log /etc/nginx/access.log main; #nginx日誌
    root         /usr/share/nginx/html;
    # Load configuration files for the default server block.
    include /etc/nginx/default.d/*.conf;
    location / { #默認請求訪問
	include	/etc/nginx/uwsgi_params;
	uwsgi_pass  192.168.1.193:8000; #請求自動轉發給192.168.1.193:8000的uWSGI socket,與上面uWSGI的socket參數要一致。
    index  index.html index.htm;
	client_max_body_size 35m;
    }
    error_page 404 /404.html;
        location = /40x.html {
    }
    error_page 500 502 503 504 /50x.html;
        location = /50x.html {
    }
}

四、運行uWSGI和nginx

啟動uwsgi和nginx:

uwsgi --ini=/etc/uwsgi.ini
service nginx start

此時你就可以通過你在urls.py定義的網址來訪問頁面了。但是需要註意的nginx上邊我監聽的是80端口,因此你只需要訪問80端口就好,他會把請求全部轉發到8000端口的uwsgi處理。

顯示的頁面如下圖所示(默認的80端口):

技術分享圖片

最後:

必須要說的是不使用nginx只用uwsgi也可以實現以上的功能,但是此時你需要為uwsgi.ini配置http參數,socket參數可以省略,如果只使用uwsgi那麽你可以通過http參數定義的端口訪問以上頁面。使用nginx的最大好處之一是實現對後端uwsgi的負載均衡,這樣可以提升並發量,此外nginx對靜態請求的處理能力要強過uwsgi,因此如果靜態請求較多,那麽可以將這部分內容用nginx處理。

Nginx+uWSGI啟動Django