时间:2021-07-01 10:21:17 帮助过:20人阅读
NOTE:不使用nginx,只使用uwsgi+django也是可以实现WEB服务的。uwsgi也可以直接处理WEB请求。
第一步先解决uwsgi与django的桥接。解决在没有nginx的情况下,如何使用uwsgi+DJANGO来实现一个简单的Web服务器。
第二步解决uwsgi与Nginx的桥接。通过nginx与uwsgi的桥接,打通nginx与django的连通,从而比较完美的实现django的部署。
环境介绍
安装uwsgi
$ export LDFLAGS = "-Xlinker --no-as-needed" $ pip install uwsgi
测试uwsgi
# test.py def application(env, start_response): start_response('200 OK', [('Content-Type','text/html')]) return "Hello World"
uwsgi --http :8001 --wsgi-file test.py
配置django
NOTE:
请保证你的django项目是正常使用的。可以使用
python manage.py runserver 0.0.0.0:8002
来测试一下你的django项目是否能正常跑起来。
注意: 编写文件时需要注意语句os.environ.setdefault。比如,如果你的项目为mysite,则你的语句应该是
1 2 3 4 5 6 7 8 9 10 11 12 13 14
#!/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" ) from django.core.handlers.wsgi import WSGIHandler application = WSGIHandler ()
连接django和uwsgi,实现简单的Web服务器。
uwsgi --http :8000 --chdir /home/work/src/sites/testdjango1/testdjango/mysite --module django_wsgi
最后:
参考、解释及其它
wsgi: WSGI是一种Web服务器网关接口。它是一个Web服务器(如nginx)与应用服务器(如uWSGI服务器)通信的一种规范。
关于WSGI协议看这里:WSGI
uWSGI: http://uwsgi-docs.readthedocs.org/en/latest/index.html uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。 Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换。
uwsgi: uwsgi同WSGI一样是一种通信协议,而uWSGI是实现了uwsgi和WSGI两种协议的Web服务器。
uwsgi协议是一个uWSGI服务器自有的协议,它用于定义传输信息的类型(type of information),每一个uwsgi packet前4byte为传输信息类型描述,它与WSGI相比是两样东西。
关于uwsgi协议看这里:The uwsgi protocol
有了uWSGI为什么还需要nginx?
nginx具备优秀的静态内容处理能力,然后将动态内容转发给uWSGI服务器,这样可以达到很好的客户端响应。
参考文献:http://heipark.iteye.com/blog/1750970
环境介绍
配置uWSGI
:8077 /home/work/src/sites/testdjango1/testdjango/mysite django_wsgi 4 uwsgi.log
配置Nginx
server { listen 80 ; server_name www . you . com ; access_log / home / work / var / test / logs / access . log ; error_log / home / work / var / test / logs / error . log ; #charse t koi8 - r ; #access _log logs / host . access . log main ; location / { include uwsgi_params ; uwsgi_pass 127 . 0 . 0 . 1 : 8077 ; } #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 / { alias / home / work / src / sites / testdjango1 / testdjango / collectedstatic / ; index index . html index . htm ; } location / media / { alias / home / work / src / sites / testdjango1 / testdjango / public / media / ; } }
Nginx+uWSGI+Django的实现方式
重启Nginx服务器,以使Nginx的配置生效。
nginx -s reload
重启后检查Nginx日志是否有异常。
启动uWSGI服务器
cd /home/work/src/sites/testdjango1/testdjango/mysite uwsgi -x djangochina_socket.xml
检查日志 uwsgi.log 是否有异常发现。
访问服务
基于上面的假设你的域名是www.you.com
因此,我们访问 www.you.com,如果发现程序与 单独使用Django启动的程序一模一样时,就说明成功啦!
关闭服务的方法
将uWSGi进程杀死即可。
一些建议
uWSG配置文件的进程数,可以根据实际情况分配。不要开得太大,否则机器可能会内存耗用太高。一般来说,对于一个小社区来说,4个进程已经足够了。
一般情况下,可以编写一下 stop.sh 脚本 来关闭uWSGI。
以上就介绍了五步教你实现使用Nginx+uWSGI+Django方法部署Django程序,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。