图像

Nginx and uwsgi with file socket

Nginx和uwsgi是除了Apache和mod_wsgi外比较流行的python部署方式,前面我已经讲了这两种模式的结合。但是在uwsgi的upstream component中,更流行的方式是通过file sock来连接,因为它是更好的连接方式。
但是我们国内的版本,基本都是web socket的模式的比较多,我自己也是先尝试web socket模式,然后才转到file sock模式。

这里有几点需要注意:

1. 我们一般将uwsgi配置文件放到一个类似/etc/uwsgi/vassals这样路径的文件夹里面;
2. 然后通过uwsgi --emperor /etc/uwsgi/vassals来调用多个应用的配置文件;
3. 权限问题相当重要(log文件权限、nginx连接uwsgi file sock的权限和运行uwsgi时配置的uid和gid)。

我们先来看一段配置文件(保证可以跑起来的配置文件):

# courb_uwsgi.ini file
[uwsgi]

# Django-related settings
# the base directory (full path)
chdir           = /opt/lampp/www/courb
wsgi-file = courb/wsgi.py
# Django wsgi file
module          = courb.wsgi
# the virtualenv (full path)
# home            = /usr/local/bin/virtualenv

# process-related settings
# master
master          = true
# maximum number of worker processes
# processes   = 10
threads = 30
# the socket (use the full path to be safe
socket          = /opt/lampp/www/courb/courb.sock
# set an environment variable
env = DJANGO_SETTINGS_MODULE=courb.settings
# create a pidfile
pidfile = /tmp/courb.pid
# respawn processes taking more than 20 seconds
harakiri = 20
# limit the project to 128 MB
limit-as = 289
# respawn processes after serving 5000 requests
max-requests = 5000
daemonize = /var/log/uwsgi/courb.log

# ... with appropriate permissions - may be needed
chmod-socket    = 666
chown-socket    = nginx:nginx
uid             = nginx
gid             = nginx
enable-threads  = true
# clear environment on exit
vacuum          = true

这里你得确保/var/log/uwsgi目录nginx用户和组有读和写的权限,你可以直接用

chown nginx:nginx /var/log/uwsgi

这样就不会报permission错误;
再次你得确保你的应用的目录nginx用户和组具有读和写的权限,同样的命令:

chown -R nginx:nginx /opt/lampp/www/courb

这样你的应用不会出现502 bad错误,而且Nginx的日志文件里不会报permission错误;
最后一步,你把uwsgi跑起来,然后

/etc/init.d/nginx restart

前提是你已经在nginx里面做了你的应用的配置。
Nginx的配置部分配置如下:

# courb_nginx.conf

# the upstream component nginx needs to connect to
upstream django {
    server unix:///opt/lampp/www/courb/courb.sock; # for a file socket
    # server 127.0.0.1:8001; # for a web port socket (simple way)
}
.....

发表评论