the web client <-> the web server(nginx) <-> the socket <-> uwsgi <-> Django
如果Nginx原先安装过,最好先彻底删除再重新安装!彻底删除的方法
apt-get update
apt-get install nginx
/etc/init.d/nginx start #启动
/etc/init.d/nginx stop #关闭
/etc/init.d/nginx restart #重启
Nginx默认监听80端口
所以安装完毕,访问localhost
或者服务器自己的ip地址就可以看到下面的画面。
pip install --upgrade pip #升级pip
pip install uwsgi`
写一个test.py测试uwsgi
# test.py
def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return "Hello World"
然后执行shell命令:
uwsgi --http :8001 --wsgi-file test.py
确保Django自身可以启动运行,在Django应用的目录下:
python manage.py runserver 0.0.0.0:8002
访问8002端口,如果正常,说明Django启动成功!如下图!
编写django_wsgi.py文件,将其放在与文件manage.py同一个目录下。
#!/usr/bin/env python
# coding: utf-8
import os
import sys
# 将系统的编码设置为UTF8
reload(sys)
sys.setdefaultencoding('utf8')
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")#mysite替换为自己的项目名
from django.core.handlers.wsgi import WSGIHandler
application = WSGIHandler()
通过Django与uwsgi就已经可以形成一个简单的web服务器了
编写完成django_wsgi.py
文件后执行:
uwsgi --http :8000 --chdir path/to/yoursite --module django_wsgi
这样,就可以在浏览器中的8000端口访问Django程序了。
所有的请求都是经过uwsgi传递给Django程序的。
注意到,此时是访问不了js/css静态文件的!这些静态文件将交给Nginx直接处理
为了实现Nginx与uWSGI的连接,两者之间将采用soket来通讯方式
将使用uWSGI配置文件的方式来改进uWSGI的启动方式
将要让Nginx采用8077端口与uWSGI通讯,请确保此端口没有被其它程序采用。
下面编写uwsgi的配置文件
新建一个XML文件:djangochina_socket.xml,与manage.py在同一级目录
<uwsgi>
<socket>:8077socket>
<chdir>path/to/yoursitechdir>
<module>django_wsgimodule>
<processes>4processes>
<daemonize>uwsgi.logdaemonize>
uwsgi>
在上面的配置中,我们使用 uwsgi.log 来记录日志,开启4个进程来处理请求。
这样,我们就配置好uWSGI了。
上文已经连接了uWsgi与Django应用,下面连接Nginx与uwsgi
修改/etc/nginx/sites-enabled/default
server {
listen 80 default_server;
root /usr/share/nginx/html;
index index.html index.htm;
# Make site accessible from http://localhost/
server_name www.nghuyong.top;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8077;
}
location /static/ {
alias path/to/yoursite/static/;
index index.html index.htm;
}
}
在上面的设置后,可以让Nginx来处理静态文件(/static)。非静态文件请求Nginx会发给 socket 8077,然后让uWSGI来进行处理。
1.重启Nginx服务器,以使Nginx的配置生效。
nginx -s reload
2.启动uWSGI服务器
cd path/to/yoursite
uwsgi -x djangochina_socket.xml
检查日志 uwsgi.log 是否有异常发现。
3. 访问服务
基于上面的假设你的域名是www.you.com
因此,我们访问 www.you.com,如果发现程序与 单独使用Django启动的程序一模一样时,就说明成功啦!
4.关闭服务的方法
将uWSGi进程杀死即可。
查询8077端口的进程
lsof -i:8077
kill PID
也可以写一个脚本来控制uwsgi启动和停止:
#!/bin/bash
if [ ! -n "$1" ]
then
echo "Usages: sh uwsgiserver.sh [start|stop|restart]"
exit 0
fi
if [ $1 = start ]
then
psid=`ps aux | grep "uwsgi" | grep -v "grep" | wc -l`
if [ $psid -gt 4 ]
then
echo "uwsgi is running!"
exit 0
else
uwsgi /etc/uwsgi.ini
echo "Start uwsgi service [OK]"
fi
elif [ $1 = stop ];then
killall -9 uwsgi
echo "Stop uwsgi service [OK]"
elif [ $1 = restart ];then
killall -9 uwsgi
/usr/bin/uwsgi --ini /etc/uwsgi.ini
echo "Restart uwsgi service [OK]"
else
echo "Usages: sh uwsgiserver.sh [start|stop|restart]"
fi