Debian平台搭建基于nginx + Django的WEB站点
今天有位同事让我把一个系统的Apache + Django站点换成nginx + Django站点,刚好由于我的这个站点用的虚拟主机,由于内存比较小,所以之前自己刚好搭个,顺手翻出旧的记录,整理一下,在这里做一份保存
在Debian上的nginx安装相当容易,这里不废话,只是版本比较低,是0.6x的,如果需要最新版本,就自己编译吧,主要是用fastcgi跑django project,要安装flup,可以apt-get install python-flup搞定,至于如何使用fastcgi跑django project,请参考此页面
这里引用一部份:
Running a threaded server on a TCP port:
./manage.py runfcgi method=threaded host=127.0.0.1 port=3033
Running a preforked server on a Unix domain socket:
./manage.py runfcgi method=prefork socket=/home/user/mysite.sock pidfile=django.pid
Run without daemonizing (backgrounding) the process (good for debugging):
./manage.py runfcgi daemonize=false socket=/tmp/mysite.sock maxrequests=1
接下来就是nginx的配置了,Debian的配置文件有自己的一套规则,这里我们需要修改/etc/nginx/sites-available/default这个文件,当然可以另起一个,比如/etc/nginx/sites-available/mysite
主要是配置server段,其中的location /节,这里我的配置文件如下:
server {
listen 80;
server_name localhost;
#这里我关闭了access_log
#access_log /var/log/nginx/localhost.access.log;
location / {
#下面这句如果你是使用tcp socket的话,请换成
# fastcgi_pass host:port;
# 其中host/port是在使用fastcgi运行django时指定的
# 在高负载时使用unix socket效率会比tcp socket好
fastcgi_pass unix:/home/www-data/logs/pyeye.socket;
fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_pass_header Authorization;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
fastcgi_intercept_errors off;
}
#下面是两个静态文件目录的配置,这根据需要自行变更
location ^~/media {
alias /home/www-data/htdocs/pyeye/media;
}
location ^~/adminmedia {
alias /home/www-data/lib/django/contrib/admin/media;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /var/www/nginx-default;
}
配置文件修改好后,记得到/etc/nginx/sites-enabled目录建立一个到此配置文件的软链接
之后就可以使用/etc/init.d/nginx restart了
补充:
有时候我发现使用/etc/init.d/nginx并不能很好的控制nginx,所以还是使用kill <signal> nginx-pid来控制好一点,比如我执行ps auxww | grep nginx有如下内容:
tiredboy 1059 0.0 0.0 4524 728 pts/0 S+ 22:15 0:00 grep nginx
root 30113 0.0 0.0 4416 612 ? Ss 11:53 0:00 nginx: master process /usr/sbin/nginx
www-data 30114 0.0 0.0 5008 1564 ? S 11:53 0:00 nginx: worker process
这个时候找到nginx:master process这一行,pid是30113,我希望nginx能重新加载配置,则只需要执行
kill -HUP 30113
就可以了

Leave a Reply