Django项目在nginx上面的部署(django+flup+nginx)
首先说下需要用到的软件
1、python环境
因为我用的centos6.2 上面自带了python2.6.6的环境。所以就可以不用安装了。
2、Django环境
我们这里用easy_install的方式来安装,因为后面装其他关于python的都可以用到。当然你可以下载源码编译安装,都行。
首先用yum安装easy_install
yum -y install python-setuptools
安装完成后,用easy_install来安装django
easy_install "django==1.4.5"
3、flup
flup: 一个用python写的web server,也就是cgi中所谓的Server/Gateway,它负责接受apache/nginx转发的请求,并调用你写的程序 (application),并将application处理的结果返回到apache/nginx.
安装flup
easy_install flup
虽说django自带一个开发用的服务器。
manage.py runserver。可以结合nginx部署一个web站点,但是这个开发的服务器必然没有python的web服务器flup专业.
4、nginx安装
可以参考我以前的博文来安装nginx,http://www.linuxyan.com/web-server/32.html
都安装好之后,就可以来配置flup和nginx了。
首先启动flup,到自己的django目录下。
一种是用sock来通信的:python manage.py runfcgi socket=/tmp/python.sock maxrequests=1
一种是用监听端口来通信的:python manage.py runfcgi method=prefork host=127.0.0.1 port=9001
用sock启动的,可以用
ll /tmp/python.sock
来查看sock文件是否成功生成,还有就是注意sock文件权限是否正确。如果访问出现502,就有可能是sock文件的权限问题。
如果用端口来启动的。可以用
netstat -tnlp
来查看9001端口是否处于监听状态。
启动之后,配置nginx的server段
server { listen 80; server_name www.linuxyan.com; root /var/www/html/djangodemo; access_log /var/log/nginx/log/python.access.log; error_log /var/log/nginx/log/python.error.log; #配置django admin需要的文件(如果启用的django的admin功能) location ~* ^/media/(css|img|js)/.*$ { root /usr/local/lib/python2.6/site-packages/django/contrib/admin; expires 30d; break; } location / { fastcgi_pass unix:/tmp/python.sock; #如果上面是采用端口的启动则 #fastcgi_pass 127.0.0.1:9001; fastcgi_pass_header Authorization; fastcgi_intercept_errors off; 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_param SERVER_PORT $server_port; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param SERVER_NAME $server_name; fastcgi_param REQUEST_URI $request_uri; fastcgi_param DOCUMENT_URI $document_uri; fastcgi_param DOCUMENT_ROOT $document_root; fastcgi_param SERVER_ADDR $server_addr; fastcgi_param REMOTE_USER $remote_user; fastcgi_param REMOTE_ADDR $remote_addr; fastcgi_param REMOTE_PORT $remote_port; fastcgi_param SERVER_SOFTWARE "nginx"; fastcgi_param GATEWAY_INTERFACE "CGI/1.1"; } }