uWSGI其三:uWSGI搭配Nginx使用


http://www.nowamagic.net/academy/detail/1330334

上一篇介紹了 uWSGI 來部署 Django 程序,但在在生產環境中單單只有 uWSGI 是不夠的,Nginx是必不可少的工具。

先安裝 Nginx,可以參照前面的小節:使用RPM安裝Nginx

Nginx 配置

在 nginx.conf 上加入/修改,我的 server 配置如下(一切從簡……):

01 server {
02     listen       80;
03     server_name  115.28.0.89;
04     #server_name localhost;
05  
06     access_log /home/nowamagic/logs/access.log;
07     error_log /home/nowamagic/logs/error.log;
08  
09     #root         /root/nowamagic_venv/nowamagic_pj;
10     location / {
11         uwsgi_pass 127.0.0.1:8077;
12         #include uwsgi_params;
13         include /etc/nginx/uwsgi_params;
14         #uwsgi_pass 127.0.0.1:8077;
15         #uwsgi_param UWSGI_SCRIPT index;
16         #uwsgi_param UWSGI_PYHOME $document_root;
17         #uwsgi_param UWSGI_CHDIR  $document_root;
18    }
19    access_log off;
20 }

注意保證配置里寫的目錄 /home/nowamagic/logs/ 和 /home/nowamagic/logs/ 存在,接下來就沒啥問題了,Nginx 配置很簡單。

uWSGI 配置

前面我們是直接使用命令行來啟動 uWSGI,在實際部署環境中,我們常用的是配置文件的方式,而非命令行的方式。

我的 Django 程序目錄:/root/nowamagic_venv/nowamagic_pj/

這里讓 Nginx 采用 8077 端口與 uWSGI 通訊,請確保此端口沒有被其它程序采用。

uWSGI 支持多種配置文件格式,比如 xml,ini,json 等等都可以。

1. xml 配置

請確定你在上一節中的django_wsgi.py文件已經存在了。新建一個XML文件:nowamagic_pj.xml,將它放在 /root/nowamagic_venv/nowamagic_pj 目錄下

01 <uwsgi>
02  <socket>127.0.0.1:8077</socket>
03  <listen>80</listen>
04  <master>true</master>
05  <pythonpath>/root/nowamagic_venv/nowamagic_pj</pythonpath>
06  <processes>1</processes>
07  <logdate>true</logdate>
08  <daemonize>/var/log/uwsgi.log</daemonize>
09  <plugins>python</plugins>
10 </uwsgi>

然后執行命令:

1 uwsgi -x /root/nowamagic_venv/nowamagic_pj/nowamagic_pj.xml
2 or
3 /usr/local/bin/uwsgi -x /root/nowamagic_venv/nowamagic_pj/nowamagic_pj.xml

加載指定的xml配置文件。當使用命令行參數時,可以使用簡化命令“-x”。當然也可以不簡寫:

1 uwsgi --xml /etc/nowamagic.xml

甚至如果在命令行的最后一個參數以“.xml”結尾,那么就隱含將加載該xml文件作為配置。

1 uwsgi /etc/nowamagic.xml

有時候因各種環境問題,-x --xml 命令識別不了,可以使用下面的 ini 配置方式:

2. ini 配置

01 [uwsgi]
02 vhost = false
03 plugins = python
04 socket = 127.0.0.1:8077
05 master = true
06 enable-threads = true
07 workers = 1
08 wsgi-file = /root/nowamagic_venv/nowamagic_pj/nowamagic_pj/wsgi.py
09 virtualenv = /root/nowamagic_venv
10 chdir = /root/nowamagic_venv/nowamagic_pj

然后執行命令:

1 uwsgi --ini /root/nowamagic_venv/nowamagic_pj.ini&

uwsgi 這樣就啟動起來了。如果無意外的話,就能在網上訪問你的 Python 項目了。

小插曲

我在配置完 Nginx 和 uWSGI 之后,訪問時顯示 502 錯誤。查看 uWSGI 啟動信息,發現這么一條:ImportError: No module named django.core.wsgi。

然后推斷,我的 CentOS 上的 Python 版本是 2.4.3,然后進入 virtualenv,執行:

1 python
2 <<< import django
3 <<< from django.core.wsgi import get_wsgi_application
4 <<<

則沒報錯,因為我的虛擬環境里的 Python 版本是 2.7.5。推斷成立,但是虛擬環境里的 Django 會默認調用外部環境的 Python。解決方法:在虛擬環境里 pip install django。

OK,問題解決,一切正常。

一些我在配置時用到的命令,省得你去搜索:

1. 關閉 uWSGI:

1 killall  -9 uwsgi
2 killall -s HUP /var/www/uwsgi 
3 killall -s HUP /usr/local/bin/uwsgi

2. 列出端口占用情況:

1 netstat -lpnt


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM