Django學習之路(七)生產環境中的使用
基本思路
1,方案:Nginx+uwsgi
這個方案的大體思路就是:nginx作為伺服器最前端,負責接收client的所有請求,統一管理。
靜態請求由Nginx自己處理,非動態請求通過uwsgi傳遞給Django,由Django來進行處理,從而完成一次web請求。
2,通訊請求:
the web client<->the web server(nginx)<->the socket<->uwsgi<->Django
配置Nginx
安裝Nginx
Ubuntu上:
sudo install nginx
Centos上:
yum install nginx
啟動Nginx
service nginx start #啟動
service nginx stop #關閉
service nginx restart #重啟
在阿里雲的centos中安裝nginx時候發現無法啟動,最後發現是http的埠被佔用。這時候可以輸入命令停止佔用埠的服務:
systemctl stop httpd
systemctl disable httpd
按照正常道理來說這樣就可以直接通過伺服器的IP來訪問網頁。
實際操作中又發現,在阿里雲部署的nginx無法出現正常的網頁“Welcome to nginx”。具體原因是需要在阿里雲的安全組中新增80埠的許可權。
http://blog.csdn.net/KascLiyuan/article/details/73438093
以上網頁有具體解決方案。
配置uwsgi
安裝uwsgi:
#假如說缺少libxml2檔案:
yum install libxml*
#假如說缺少python-devel
yum install python-devel
pip install uwsgi
不建議使用yum或者apt-get。
連線uwsgi與Django
通過Django與uwsgi可以形成了一個簡單的web伺服器。想要完成這一個環節,需要在開啟manage.py的同級目錄,新建django_wsgi.py檔案。
# coding: utf-8
import os
import sys
# 將系統的編碼設定為UTF8
reload(sys)
sys.setdefaultencoding('utf8')
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")#mysite替換為自己的專案名
#啟動django的服務
import django
django.setup()
from django.core.handlers.wsgi import WSGIHandler
application = WSGIHandler()
在編寫django_wsgi.py檔案後執行:
uwsgi --http:8000 --chdir /path/to/yourblog --module django_wsgi
這樣,就可以在瀏覽器的8000埠訪問django程式。所有請求都是經過uwsgi傳遞給Django程式。
此時是無法訪問js/css靜態檔案,這些檔案都將交給Nginx處理。
實現Nginx與uwsgi的連線
一,編寫uwsgi配置檔案
在manage.py同級目錄下新建xml檔案:django_socket.xml:
<uwsgi>
<socket>:8077</socket>
<chdir>path/to/yoursite</chdir>
<module>django_wsgi</module>
<processes>4</processes> <!-- 程序數 -->
<daemonize>uwsgi.log</daemonize>
</uwsgi>
以上開啟4個程序來處理請求。佔用埠8077。
二,Nginx配置
以上連線uwsgi與django,下面配置Nginx。
開啟/etc/nginx/nginx.conf檔案,新增以下內容:
server {
listen 80;
server_name 127.0.0.1
charset UTF-8;
access_log /var/log/nginx/myweb_access.log;
error_log /var/log/nginx/myweb_error.log;
client_max_body_size 75M;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8077;
uwsgi_read_timeout 2;
}
location /static {
expires 30d;
autoindex on;
add_header Cache-Control private;
alias path/to/yoursite/static/;
}
}
類似這樣,nginx到底是如何與uwsgi產生關聯,目前理解為這兩行配置:
include uwsgi_params;
uwsgi_pass 127.0.0.1:8077
uwsgi_pass需要與本文django_socket.xml配置檔案中的埠一致。
結尾
重新啟動nginx
service nginx reload
service nginx restart
開啟manage.py同級目錄下的命令列:
uwsgi -x django_socket.xml
最後就可以在瀏覽器中通過伺服器ip訪問網頁。