Nginx + uwsgi + Django 安裝配置html
1、安裝Nginx uwsgi Djangopython
安裝tenginenginx
yum install pcre-devel -y wget http://tengine.taobao.org/download/tengine-2.1.1.tar.gz tar xf tengine-2.1.1.tar.gz cd tengine-2.1.1 ./configure make make installl
#安裝位置默認在/usr/local/nginxdjango
安裝Django瀏覽器
wget https://www.djangoproject.com/m/releases/1.4/Django-1.4.22.tar.gz tar xf Django-1.4.22.tar.gz cd Django-1.4.22 python setup.py install
安裝uwsgi緩存
pip install uwsgi
2、配置bash
一、測試uwsgi代理功能服務器
測試文件test.pyapp
#!/usr/bin/env python #coding:utf8 def application(env, start_response): start_response('200 OK', [('Content-Type','text/html')]) return ["Hello World"]
執行命令:
socket
uwsgi --http :8000 --wsgi-file test.py
在瀏覽器中訪問,http://localhost:8000 若是出現Hello World 則說明uwsgi代理正常工做
二、測試uwsgi 啓動django項目
建立項目:
# django-admin startproject myapp
在myapp/myapp/有一個wsgi.py文件
執行命令:
# cd myapp
# uwsgi --http :8000 --wsgi-file myapp/wsgi
在瀏覽器中訪問http://localhost:8000
若是網頁正常則一切順利。。。。。。
說明:從客戶商到 uWSGI 再到 Django 是正常的,uwsgi能夠正常啓動django項目
三、配置nginx + uwsgi + django
首先配置使用http的方式:
編輯配置文件/usr/local/nginx/conf/nginx.conf
內容以下:
user nginx; #使用nginx用戶 worker_processes 2; events { use epoll; worker_connections 65535; } http { include mime.types; default_type application/octet-stream; sendfile on; tcp_nopush on; keepalive_timeout 65; gzip on; upstream django { server 127.0.0.1:8001; } server { listen 80; server_name localhost; client_max_body_size 75M; location / { uwsgi_pass django; include uwsgi_params; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
執行命令:
uwsgi --http :8001 --wsgi-file myapp/wsgi
使用瀏覽器訪問http://localhost 應該用正常訪問,出現如下圖片:
用UNIX socket取代tcp port
修改nginx.conf upstream django { #server 127.0.0.1:8001; server unix:///test/myapp.sock; }
來建立/test這個目錄
mkdir /test
chown nginx:nginx /test #若是不修改用戶權限,nginx沒法訪問此socket 沒法實現代理
會報以下錯誤:
connect() to unix:///test/myapp.sock failed (13: Permission denied)
啓動:
uwsgi --socket /test/myapp.sock --wsgi-file myapp.wsgi
到此nginx+uwsgi+django已經初步實現了,下面來爲uwsgi設置一個配置文件
四、配置myapp_uwsgi.ini
在Django項目目錄下建立myapp_uwsgi.ini 內容以下:
[uwsgi] uid = nginx #使用nginx用戶和組 gid = nginx chdir = /usr/local/myapp #指定項目目錄 module = myapp.wsgi #加載myapp/wsgi.py這個模塊 master = true #啓動主進程。 processes = 2 #啓動2個工做進程 listen = 120 #設置socket的監聽隊列大小(默認:100) socket = /test/myapp.sock #指定socket文件 pidfile = /var/run/uwsgi.pid #指定pid文件 vacuum = true #當服務器退出的時候自動刪除unix socket文件和pid文件。 enable-threads = true #容許用內嵌的語言啓動線程。這將容許你在app程序中產生一個子線程 buffer-size = 32768 #設置用於uwsgi包解析的內部緩存區大小爲64k。默認是4k。 reload-mercy = 8 #設置在平滑的重啓(直到接收到的請求處理完才重啓)一個工做子進程中,等待這個工做結束的最長秒數。這個配置會使在平滑地重啓工做子進程中,若是工做進程結束時間超過了8秒就會被強行結束(忽略以前已經接收到的請求而直接結束) max-requests = 5000 #爲每一個工做進程設置請求數的上限。當一個工做進程處理的請求數達到這個值,那麼該工做進程就會被回收重用(重啓)。你可使用這個選項來默默地對抗內存泄漏 limit-as = 256 #經過使用POSIX/UNIX的setrlimit()函數來限制每一個uWSGI進程的虛擬內存使用數。這個配置會限制uWSGI的進程佔用虛擬內存不超過256M。若是虛擬內存已經達到256M,並繼續申請虛擬內存則會使程序報內存錯誤,本次的http請求將返回500錯誤。 harakiri = 60 #一個請求花費的時間超過了這個harakiri超時時間,那麼這個請求都會被丟棄,而且當前處理這個請求的工做進程會被回收再利用(即重啓) daemonize = /var/log/myapp_uwsgi.log # 使進程在後臺運行,並將日誌打到指定的日誌文件或者udp服務器
啓動:
uwsgi --ini myapp_uwsgi.ini
測試是否正常,若是不正常,能夠查看日誌,排錯。
到此Nginx + Uwsgi + Django配置完成 ,並正常使用。整個過程走了很坑,找了很文章和資料,uwsgi還有不少選項,參考了網友的文章
參考連接:
http://www.jianshu.com/p/e6ff4a28ab5a
http://heipark.iteye.com/blog/1847421