您的位置:首页 > 运维架构 > Nginx

uWSGI其三:uWSGI搭配Nginx使用

2016-03-17 15:02 555 查看
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_namelocalhost;
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
#includeuwsgi_params;
13
include
/
etc
/
nginx
/
uwsgi_params;
14
#uwsgi_pass127.0.0.1:8077;
15
#uwsgi_paramUWSGI_SCRIPTindex;
16
#uwsgi_paramUWSGI_PYHOME$document_root;
17
#uwsgi_paramUWSGI_CHDIR$document_root;
18
}
19
access_logoff;
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:Nomodulenameddjango.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。解决方法:在虚拟环境里pipinstalldjango。

OK,问题解决,一切正常。

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

1.关闭uWSGI:

1
killall-9uwsgi
2
killall-sHUP/var/www/uwsgi
3
killall-sHUP/usr/
local
/bin/uwsgi
2.列出端口占用情况:

viewsource

print?

1
netstat
-lpnt
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: