新建一个XML文件:
djangochina_socket.xml,将它放在/data/www/org_management目录下:
Nginx采用8077端口与uWSGI通讯,请确保此端口没有被其它程序采用
<uwsgi> <socket>:8077</socket> <chdir>/data/www/org_management</chdir> <module>org_management.wsgi</module> <processes>4</processes> <!-- 进程数 --> <daemonize>uwsgi.log</daemonize> </uwsgi>
我们假设你将会把Nginx程序日志放到你的目录/data/www/org_management下,请确保该目录存在。
我们假设你的Django的static目录是/data/www/org_management/static/ , media目录是/data/www/org_management/media/,请确保这些目录存在。
我们假设你的域名是 www.you.com (在调试时你可以设置成你的机器IP或者直接注释掉)
我们假设你的域名端口是 80(在调试时你可以设置一些特殊端口如 8070)
基于上面的假设,我们为/etc/nginx/conf.d 添加以下配置 org_nginx.conf 确保org_nginx.conf 在nginx的安装目录,否则会找不到
server { listen 80; #服务器开放端口号 server_name yl.youname.com; #域名如果没有可以注释 access_log /data/www/org_management/logs/access.log; #logs文夹必须有 error_log /data/www/org_management/logs/error.log; #logs文件夹必须有 #charset koi8-r; #access_log logs/host.access.log main; #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } #静态文件夹 location /static/xadmin/ { alias /data/www/org_management/extra_apps/xadmin/static/xadmin/; } #静态文件夹 location /static/ { alias /data/www/org_management/static/; } #上传文件目录 location /media/ { alias /data/www/org_management/media/; } #建议放最后否则会出现找不到静态文件情况 location / { include uwsgi_params; uwsgi_pass 127.0.0.1:8077; #和uwsgi通讯保持一致 } }
在上面的设置后,可以让Nginx来处理静态文件(/static/ 和 /media/ )。非静态文件请求Nginx会发给 socket 8077,然后让uWSGI来进行处理。
Nginx+uWSGI+Django的实现方式
在完成上面配置后,需要按以下步骤来做:
-
重启Nginx服务器,以使Nginx的配置生效。
-
nginx -s reload
重启后检查Nginx日志是否有异常。
-
启动uWSGI服务器
/data/www/org_management uwsgi -x djangochina_socket.xml
检查日志 uwsgi.log 是否有异常发现。
-
访问服务
基于上面的假设你的域名是www.you.com
因此,我们访问 www.you.com,如果发现程序与 单独使用Django启动的程序一模一样时,就说明成功啦!
-
关闭服务的方法 killall uwsgi 关闭所有uwsgi 在开启进程中可以设定一个uwsgi为主进程,杀死主进程即可 将uWSGi进程杀死即可。
一些建议
-
uWSG配置文件的进程数,可以根据实际情况分配。不要开得太大,否则机器可能会内存耗用太高。一般来说,对于一个小社区来说,4个进程已经足够了。
-
一般情况下,可以编写一下 stop.sh 脚本 来关闭uWSGI。