Nginx + uwsgi + Django 安装配置
一、安装Nginx uwsgi Django
安装tengine
1
2
3
4
5
6
7
8
9
<code>yum </code><code>install</code> <code>pcre-devel -y </code>
<code>wget http:</code><code>//tengine</code><code>.taobao.org</code><code>/download/tengine-2</code><code>.1.1.</code><code>tar</code><code>.gz</code>
<code>tar</code> <code>xf tengine-2.1.1.</code><code>tar</code><code>.gz</code>
<code>cd</code> <code>tengine-2.1.1</code>
<code>.</code><code>/configure</code>
<code>make</code>
<code>make</code> <code>installl</code>
#安装位置默认在/usr/local/nginx
安装Django
<code>wget https:</code><code>//www</code><code>.djangoproject.com</code><code>/m/releases/1</code><code>.4</code><code>/Django-1</code><code>.4.22.</code><code>tar</code><code>.gz</code>
<code>tar</code> <code>xf Django-1.4.22.</code><code>tar</code><code>.gz</code>
<code>cd</code> <code>Django-1.4.22</code>
<code>python setup.py </code><code>install</code>
安装uwsgi
<code>pip </code><code>install</code> <code>uwsgi</code>
二、配置
1、测试uwsgi代理功能
测试文件test.py
<code>#!/usr/bin/env python</code>
<code>#coding:utf8</code>
<code>def</code> <code>application(env, start_response):</code>
<code> </code><code>start_response(</code><code>'200 OK'</code><code>, [(</code><code>'Content-Type'</code><code>,</code><code>'text/html'</code><code>)])</code>
<code> </code><code>return</code> <code>[</code><code>"Hello World"</code><code>]</code>
执行命令:
<code>uwsgi --http :8000 --wsgi-</code><code>file</code> <code>test</code><code>.py</code>
在浏览器中访问,http://localhost:8000 如果出现Hello World 则说明uwsgi代理正常工作
2、测试uwsgi 启动django项目
创建项目:
# django-admin startproject myapp
在myapp/myapp/有一个wsgi.py文件
执行命令:
# cd myapp
# uwsgi --http :8000 --wsgi-file myapp/wsgi
在浏览器中访问http://localhost:8000
如果网页正常则一切顺利。。。。。。
说明:从客户商到 uWSGI 再到 Django 是正常的,uwsgi可以正常启动django项目
3、配置nginx + uwsgi + django
首先配置使用http的方式:
编辑配置文件/usr/local/nginx/conf/nginx.conf
内容如下:
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<code>user nginx; </code><code>#使用nginx用户</code>
<code> </code><code>worker_processes 2;</code>
<code> </code><code>events {</code>
<code> </code><code>use epoll;</code>
<code> </code><code>worker_connections 65535;</code>
<code> </code><code>}</code>
<code> </code><code>http {</code>
<code> </code><code>include mime.types;</code>
<code> </code><code>default_type application</code><code>/octet-stream</code><code>;</code>
<code> </code><code>sendfile on;</code>
<code> </code><code>tcp_nopush on;</code>
<code> </code><code>keepalive_timeout 65;</code>
<code> </code><code>gzip</code> <code>on;</code>
<code> </code><code>upstream django {</code>
<code> </code><code>server 127.0.0.1:8001;</code>
<code> </code><code>}</code>
<code> </code><code>server {</code>
<code> </code><code>listen 80;</code>
<code> </code><code>server_name localhost;</code>
<code> </code><code>client_max_body_size 75M;</code>
<code> </code>
<code> </code><code>location / {</code>
<code> </code><code>uwsgi_pass django;</code>
<code> </code><code>include uwsgi_params;</code>
<code> </code><code>}</code>
<code> </code><code>error_page 500 502 503 504 </code><code>/50x</code><code>.html;</code>
<code> </code><code>location = </code><code>/50x</code><code>.html {</code>
<code> </code><code>root html;</code>
<code> </code><code>}</code>
<code>uwsgi --http :8001 --wsgi-</code><code>file</code> <code>myapp</code><code>/wsgi</code>
使用浏览器访问http://localhost 应该用正常访问,出现以下图片:
<a href="http://s3.51cto.com/wyfs02/M01/72/19/wKiom1XdTRTjyyPXAAGbKGgXMf4577.jpg" target="_blank"></a>
用UNIX socket取代tcp port
<code>修改nginx.conf</code>
<code> </code><code>upstream django {</code>
<code> </code><code>#server 127.0.0.1:8001;</code>
<code> </code><code>server unix:</code><code>///test/myapp</code><code>.sock;</code>
来创建/test这个目录
mkdir /test
chown nginx:nginx /test #如果不修改用户权限,nginx无法访问此socket 无法实现代理
会报如下错误:
connect() to unix:///test/myapp.sock failed (13: Permission denied)
启动:
<code>uwsgi --socket </code><code>/test/myapp</code><code>.sock --wsgi-</code><code>file</code> <code>myapp.wsgi</code>
到此nginx+uwsgi+django已经初步实现了,下面来为uwsgi设置一个配置文件
4、配置myapp_uwsgi.ini
在Django项目目录下创建myapp_uwsgi.ini 内容如下:
<code>[uwsgi]</code>
<code>uid = nginx </code><code>#使用nginx用户和组</code>
<code>gid = nginx</code>
<code>chdir = </code><code>/usr/local/myapp</code> <code>#指定项目目录</code>
<code>module = myapp.wsgi </code><code>#加载myapp/wsgi.py这个模块</code>
<code>master = </code><code>true</code> <code>#启动主进程。</code>
<code>processes = 2 </code><code>#启动2个工作进程</code>
<code>listen = 120 </code><code>#设置socket的监听队列大小(默认:100)</code>
<code>socket = </code><code>/test/myapp</code><code>.sock </code><code>#指定socket文件</code>
<code>pidfile = </code><code>/var/run/uwsgi</code><code>.pid </code><code>#指定pid文件</code>
<code>vacuum = </code><code>true</code> <code>#当服务器退出的时候自动删除unix socket文件和pid文件。</code>
<code>enable</code><code>-threads = </code><code>true</code> <code>#允许用内嵌的语言启动线程。这将允许你在app程序中产生一个子线程</code>
<code>buffer-size = 32768 </code><code>#设置用于uwsgi包解析的内部缓存区大小为64k。默认是4k。</code>
<code>reload-mercy = 8 </code><code>#设置在平滑的重启(直到接收到的请求处理完才重启)一个工作子进程中,等待这个工作结束的最长秒数。这个配置会使在平滑地重启工作子进程中,如果工作进程结束时间超过了8秒就会被强行结束(忽略之前已经接收到的请求而直接结束)</code>
<code>max-requests = 5000 </code><code>#为每个工作进程设置请求数的上限。当一个工作进程处理的请求数达到这个值,那么该工作进程就会被回收重用(重启)。你可以使用这个选项来默默地对抗内存泄漏</code>
<code>limit-as = 256 </code><code>#通过使用POSIX/UNIX的setrlimit()函数来限制每个uWSGI进程的虚拟内存使用数。这个配置会限制uWSGI的进程占用虚拟内存不超过256M。如果虚拟内存已经达到256M,并继续申请虚拟内存则会使程序报内存错误,本次的http请求将返回500错误。</code>
<code>harakiri = 60 </code><code>#一个请求花费的时间超过了这个harakiri超时时间,那么这个请求都会被丢弃,并且当前处理这个请求的工作进程会被回收再利用(即重启)</code>
<code>daemonize = </code><code>/var/log/myapp_uwsgi</code><code>.log </code><code># 使进程在后台运行,并将日志打到指定的日志文件或者udp服务器</code>
<code>uwsgi --ini myapp_uwsgi.ini</code>
测试是否正常,如果不正常,可以查看日志,排错。
到此Nginx + Uwsgi + Django配置完成 ,并正常使用。整个过程走了很坑,找了很文章和资料,uwsgi还有很多选项,参考了网友的文章
参考链接:
http://www.jianshu.com/p/e6ff4a28ab5a
http://heipark.iteye.com/blog/1847421
本文转自 ZhouLS 51CTO博客,原文链接:http://blog.51cto.com/zhou123/1688434