nginx+uwsgi+django

uWSGI介紹

uWSGI是一個Web服務器,它實現了WSGI協議、uwsgi、http等協議。Nginx中HttpUwsgiModule的做用是與uWSGI服務器進行交換。nginx

要注意 WSGI / uwsgi / uWSGI 這三個概念的區分。web

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

uWSGI的速度很是快,普通的電腦都能承受每秒兩千屢次的併發訪問。django

uWSGI的使用vim

經過pip安裝過以後,使用命令去執行一個py文件:服務器

uwsgi  --http:8000 --wsgi-file mytest.py網絡

啓動django:併發

uwsgi --http:8000 --module mysite.wsgi     #  在每個django項目中都有一個wsgi文件。app

須要的配置的參數寫在一個ini文件中,本身vim一個文件而後放在django的主目錄中。而後使用命令:框架

uwsgi  thatfile.inidom

配置文件內容:

 1 [uwsgi]
 2 http = :9000  
 3 #the local unix socket file than commnuincate to Nginx
 4 socket = 127.0.0.1:8001    # 這裏是和Nginx進行通訊的地址,通常爲本機, 由於兩個程序運行在一個服務器中。
 5 # the base directory (full path)
 6 chdir = /home/ccc/DelightRobin
 7 # Django's wsgi file
 8 wsgi-file = DelightRobin/wsgi.py
 9 # maximum number of worker processes
10 processes = 4    # 開多少進程
11 #thread numbers startched in each worker process
12 threads = 2   #  每一個進程開多少線程
13  
14 #monitor uwsgi status
15 stats = 127.0.0.1:9191   #   uwsgi提供監控的端口 
16 # clear environment on exit
17 vacuum          = true

這裏解釋一下三者沒什麼要配合着使用:在django中提供的併發的測試模式只適用於測試用(承擔併發小,速度慢,容易down。)。同時,uwsgi也能直接運行保證django程序的運行。Nginx的做用聽說是你們都這麼用。Nginx的主要做用是接收到client的信息後給uwsgi,還有靜態文件的獲取。

Nginx安裝和使用

apt-get 安裝好Nginx以後,試着啓動去init.d下Nginx start服務。輸入本機地址已經出來歡迎頁面了。

可是若是想要本身的django啓動還要配置一個文件:mysite_nginx.conf  其中必須以nginx.conf結尾,放在django目錄中:

在此以前須要將etc/nginx 下的uwsgi_params文件拷貝到django目錄中一份。

 1 # mysite_nginx.conf
 2  
 3 # the upstream component nginx needs to connect to
 4 upstream django {
 5     # server unix:///path/to/your/mysite/mysite.sock; # for a file socket
 6     server 127.0.0.1:8001; # for a web port socket (we'll use this first)  這裏就是uwsgi配置中寫的地址 二者通訊
 7 }
 8  
 9 # configuration of the server
10 server {
11     # the port your site will be served on
12     listen      8000;   #  用戶端口
13     # the domain name it will serve for
14     server_name .example.com; # substitute your machine's IP address or FQDN
15     charset     utf-8;
16  
17     # max upload size
18     client_max_body_size 75M;   # adjust to taste
19  
20     # Django media
21     location /media  {   
22         alias /path/to/your/mysite/media;  # your Django project's media files - amend as required
23     }
24  
25     location /static {    # 項目靜態的文件的地址
26         alias /path/to/your/mysite/static; # your Django project's static files - amend as required
27     }
28  
29     # Finally, send all non-media requests to the Django server.
30     location / {
31         uwsgi_pass  django;     
32         include     /path/to/your/mysite/uwsgi_params; # the uwsgi_params file you installed  django項目中的params文件
33     }
34 }

同時作一個ln -s 的操做將這個配置文件軟鏈接到nginx/sites-enabled  中保證nginx知道項目的存在,由於nginx不僅僅能支持一個項目的啓動。

最後在django中,由於不一樣的app存在着不一樣的靜態文件,可能致使admin中的靜態文件找不到。因此經過manage.py執行復制命令。

Python3 manage.py collectstatic 

在此以前先在django的settings文件中寫入路徑 STATIC_ROOT = 'allfile' 而且保證其餘app靜態文件不能是同名的。此靜態文件纔是最後配置在nginx配置文件中的路徑文件。

相關文章
相關標籤/搜索