1. 程式人生 > >python django nginx簡要說明和配置

python django nginx簡要說明和配置

python + django 是個應用程式, 並沒有http或websocket的能力

這裡有兩種方法,簡要說明下

1、django提供了daphne使用channel提供http和websocket

2、django+nginx(配置uwsgi.ini和uwsgi_params 使用uwsgi和nginx提供http服務

下面是我在專案是使用時的一些記錄

流程: 1. 首先客戶端請求服務資源, 2. nginx作為直接對外的服務介面,接收到客戶端傳送過來的http請求,會解包、分析, 3. 如果是靜態檔案請求就根據nginx配置的靜態檔案目錄,返回請求的資源, 4. 如果是動態的請求,nginx就通過配置檔案,將請求傳遞給uWSGI;uWSGI 將接收到的包進行處理,並轉發給wsgi, 5. wsgi根據請求呼叫django工程的某個檔案或函式,處理完後django將返回值交給wsgi, 6. wsgi將返回值進行打包,轉發給uWSGI, 7. uWSGI接收後轉發給nginx,nginx最終將返回值返回給客戶端(如瀏覽器)。 *注:不同的元件之間傳遞資訊涉及到資料格式和協議的轉換*作用: 1. 第一級的nginx並不是必須的,uwsgi完全可以完成整個的和瀏覽器互動的流程; 2. 在nginx上加上安全性或其他的限制,可以達到保護程式的作用; 3. uWSGI本身是內網介面,開啟多個work和processes可能也不夠用,而nginx可以代理多臺uWSGI完成uWSGI的負載均衡; 4. django在debug=False下對靜態檔案的處理能力不是很好,而用nginx來處理更加高效。直接使用uwsgi啟動: (發現static靜態檔案沒生效,需要配置http://uwsgi-docs.readthedocs.io/en/latest/StaticFiles.html)uwsgi --http :8056 --wsgi-file dirserver/wsgi.py #自己開http服務uwsgi --socket :8056 --wsgi-file dirserver/wsgi.py #使用nginx配合使用時或修改uwsgi.ini配置表uwsgi --ini uwsgi.ini啟動nginx配置:/etc/nginx/sites-enabled/default upstream django { server unix:///home/lee/doomhotel/dev/dirserver/dirserver.sock;}server { listen 8099 default_server; listen [::]:8099 default_server; location /static { alias /home/lee/doomhotel/dev/dirserver/static; } location / { # First attempt to serve request as file, then # as directory, then fall back to displaying a 404. # try_files $uri $uri/ =404; include /home/lee/doomhotel/dev/dirserver/uwsgi_params; uwsgi_pass django; uwsgi_read_timeout 2; }