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