Nginx+uWSGI啟動Django
在之前的幾篇博客中對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