1. 程式人生 > >uwsgi加nginx部署django restframework前後端分離項目

uwsgi加nginx部署django restframework前後端分離項目

center header -m 內存 找不到 能力 private renderer 端口號

一.uwsgi和nginx簡介

  1.uwsgi(摘抄於百度百科):

    uWSGI是一個Web服務器,它實現了WSGI協議、uwsgi、http等協議。Nginx中HttpUwsgiModule的作用是與uWSGI服務器進行交換。WSGI是一種Web服務器網關接口。它是一個Web服務器(如nginx,uWSGI等服務器)與web應用(如用Flask框架寫的程序)通信的一種規範。

  2.nginx(摘抄於百度百科):

    Nginx (engine x) 是一個高性能的HTTP和反向代理服務,也是一個IMAP/POP3/SMTP服務。Nginx是由伊戈爾·賽索耶夫為俄羅斯訪問量第二的Rambler.ru站點(俄文:Рамблер)開發的,第一個公開版本0.1.0發布於2004年10月4日。

其將源代碼以類BSD許可證的形式發布,因它的穩定性、豐富的功能集、示例配置文件和低系統資源的消耗而聞名。2011年6月1日,nginx 1.0.4發布。     Nginx是一款輕量級的Web 服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器,並在一個BSD-like 協議下發行。其特點是占有內存少,並發能力強,事實上nginx的並發能力確實在同類型的網頁服務器中表現較好,中國大陸使用nginx網站用戶有:百度、京東、新浪、網易、騰訊、淘寶等。

二.使用uwsgi啟動django rest framework項目(和django一樣)

  1.測試:

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

  uwsgi --http :8000 --wsgi-file test.py,使用該命令啟動測試文件test.py,然後訪問8000端口,看是否成功。

  2.配置.ini文件(新建,任意命名,位置也可以自己選擇):

    2.1我這裏新建的是Label_System.ini(我放在項目根目錄下),現在還未使用nginx,可以先使用http端口,不適用socket:

[uwsgi]
#http是項目啟動端口
#http = :9200
#socket是於=與nginx通信的端口
socket = 127.0.0.1:8001 #the local unix socket file than commnuincate to Nginx #socket = 0.0.0.0:8001 # the base directory (full path)項目目錄 chdir = /projects/bishe # Django‘s wsgi file wsgi-file = bishe/wsgi.py # maximum number of worker processes(進程數) processes = 4 #thread numbers startched in each worker process(線程數) threads = 4
#這是python虛擬環境的位置 pythonpath=/root/#ROOT/.virtualenvs/vueshop/lib/python3.5/site-packages
#緩沖大小 buffer-size=65535 #monitor uwsgi status
#這是靜態文件
static-map=/static=static #stats = 127.0.0.1:9200 # clear environment on exit vacuum = true #daemonize = shops/uwsgi.log

    2.2啟動怕配置文件(uwsgi +配置文件名):

技術分享圖片

技術分享圖片

     可以很容易看出啟動了四個進程和對應的進程號

    2.3這時查看端口8001就可以訪問了。

三.使用nginx實現反向代理:

  1.在/etc/nginx/conf.d目錄下創建配置文件(路徑可能不同,是自己安裝的位置):

    我創建了一個my.conf,配置如下:

  

#監聽的端口號  
listen         9200;
    server_name    127.0.0.1;
    charset UTF-8;
#nginx日誌位置
    access_log      /var/log/nginx/my_web_access.log;
    error_log       /var/log/nginx/my_web_error.log;

    client_max_body_size 75M;

    location / {
        include uwsgi_params;
#這個很重要,是uwsgi的通信端口,即socket,而不是http uwsgi_pass
127.0.0.1:8001; uwsgi_read_timeout 2; } #靜態文件 location /static { expires 30d; autoindex on; add_header Cache-Control private; alias /projects/bishe/static/; } #前端頁面 location ~\.html$ { root /var/mytest/index/; index index.html index.htm; } #前端js,css,jpg,png等路徑,可以和drf的靜態文件一起配置,防止前後臺有一個找不到 location ~.*\.(js|css|jpg|png)$ { root /var/mytest/; }

  技術分享圖片

重啟nginx即可,記得uwsgi和nginx中的配置文件通信端口要一致

  2.這時訪問nginx監聽端口(9000即可),這是其中的一個界面(index.html):

技術分享圖片

  

技術分享圖片

        當然測試的界面依舊如上(這裏提一下,靜態文件可能找不到,需要在設置中配置(STATIC_ROOT="路徑")python manage.py collectstatic生成靜態文件)

  3.如何關閉測試形成json數據格式吶:

    在setting.py中的rest_framework配置如下即可(默認是BrowsableAPIRenderer):

REST_FRAMEWORK = {

‘DEFAULT_RENDERER_CLASSES‘:

( ‘rest_framework.renderers.JSONRenderer‘, ),

}

  

技術分享圖片

      

      

uwsgi加nginx部署django restframework前後端分離項目