
正文
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. 列出端口占用情况:
view source
print?
1
|
netstat
-lpnt
|






