• uWSGI其三:uWSGI搭配Nginx使用

    主要是uWSGI的配置
    服务器君一共花费 11.005 ms 进行了 4 次数据库查询,努力地为您提供了这个页面。
    广告很萌的

    上一篇介绍了 uWSGI 来部署 Django 程序,但在在生产环境中单单只有 uWSGI 是不够的,Nginx是必不可少的工具。

    先安装 Nginx,可以参照前面的小节:使用RPM安装Nginx

    Nginx 配置

    在 nginx.conf 上加入/修改,我的 server 配置如下(一切从简……):

    server {
    	listen       80;
    	server_name  115.28.0.89;
    	#server_name localhost;
    
    	access_log /home/nowamagic/logs/access.log;
    	error_log /home/nowamagic/logs/error.log;
    
    	#root         /root/nowamagic_venv/nowamagic_pj;
    	location / {
    		uwsgi_pass 127.0.0.1:8077;
    		#include uwsgi_params;
    		include /etc/nginx/uwsgi_params;
    		#uwsgi_pass 127.0.0.1:8077;
    		#uwsgi_param UWSGI_SCRIPT index;
    		#uwsgi_param UWSGI_PYHOME $document_root;
    		#uwsgi_param UWSGI_CHDIR  $document_root;
       }
       access_log off;
    }
    

    注意保证配置里写的目录 /home/nowamagic/logs/ 和 /home/nowamagic/logs/ 存在,接下来就没啥问题了,Nginx 配置很简单。

    uWSGI 配置

    前面我们是直接使用命令行来启动 uWSGI,在实际部署环境中,我们常用的是配置文件的方式,而非命令行的方式。

    我的 Django 程序目录:/root/nowamagic_venv/nowamagic_pj/

    这里让 Nginx 采用 8077 端口与 uWSGI 通讯,请确保此端口没有被其它程序采用。

    uWSGI 支持多种配置文件格式,比如 xml,ini,json 等等都可以。

    1. xml 配置

    请确定你在上一节中的django_wsgi.py文件已经存在了。新建一个XML文件:nowamagic_pj.xml,将它放在 /root/nowamagic_venv/nowamagic_pj 目录下

    <uwsgi>
     <socket>127.0.0.1:8077</socket>
     <listen>80</listen>
     <master>true</master>
     <pythonpath>/root/nowamagic_venv/nowamagic_pj</pythonpath>
     <processes>1</processes>
     <logdate>true</logdate>
     <daemonize>/var/log/uwsgi.log</daemonize>
     <plugins>python</plugins>
    </uwsgi>
    

    然后执行命令:

    uwsgi -x /root/nowamagic_venv/nowamagic_pj/nowamagic_pj.xml
    or
    /usr/local/bin/uwsgi -x /root/nowamagic_venv/nowamagic_pj/nowamagic_pj.xml
    

    加载指定的xml配置文件。当使用命令行参数时,可以使用简化命令“-x”。当然也可以不简写:

    uwsgi --xml /etc/nowamagic.xml
    

    甚至如果在命令行的最后一个参数以“.xml”结尾,那么就隐含将加载该xml文件作为配置。

    uwsgi /etc/nowamagic.xml
    

    有时候因各种环境问题,-x --xml 命令识别不了,可以使用下面的 ini 配置方式:

    2. ini 配置

    [uwsgi]
    vhost = false
    plugins = python
    socket = 127.0.0.1:8077
    master = true
    enable-threads = true
    workers = 1
    wsgi-file = /root/nowamagic_venv/nowamagic_pj/nowamagic_pj/wsgi.py
    virtualenv = /root/nowamagic_venv
    chdir = /root/nowamagic_venv/nowamagic_pj
    

    然后执行命令:

    uwsgi --ini /root/nowamagic_venv/nowamagic_pj.ini&
    

    uwsgi 这样就启动起来了。如果无意外的话,就能在网上访问你的 Python 项目了。

    小插曲

    我在配置完 Nginx 和 uWSGI 之后,访问时显示 502 错误。查看 uWSGI 启动信息,发现这么一条:ImportError: No module named django.core.wsgi。

    然后推断,我的 CentOS 上的 Python 版本是 2.4.3,然后进入 virtualenv,执行:

    python
    <<< import django
    <<< from django.core.wsgi import get_wsgi_application 
    <<<
    

    则没报错,因为我的虚拟环境里的 Python 版本是 2.7.5。推断成立,但是虚拟环境里的 Django 会默认调用外部环境的 Python。解决方法:在虚拟环境里 pip install django。

    OK,问题解决,一切正常。

    一些我在配置时用到的命令,省得你去搜索:

    1. 关闭 uWSGI:

    killall  -9 uwsgi
    killall -s HUP /var/www/uwsgi  
    killall -s HUP /usr/local/bin/uwsgi
    

    2. 列出端口占用情况:

    netstat -lpnt
    
更多 推荐条目

Welcome to NowaMagic Academy!

现代魔法 推荐于 2013-02-27 10:23   

本章最新发布
随机专题
  1. [PHP程序设计] PHP中的Hash算法 3 个条目
  2. [数据库技术] MySQL常用自带函数 3 个条目
  3. [Python程序设计] Django与表单 4 个条目
  4. [Python程序设计] Python Web部署的背景知识 9 个条目
  5. [移动开发] Android View注入框架Butter Knife 3 个条目
  6. [移动开发] Android抽屉导航NavigationDrawer 5 个条目
  7. [PHP程序设计] 对输入文件类型的检测 1 个条目
  8. [移动开发] 从代码角度去认识 Activity 4 个条目
  9. [C语言程序设计] C语言里的全局变量 2 个条目
  10. [移动开发] 从代码角度去认识 Handler 4 个条目
  11. [PHP程序设计] httpd.conf设置相关 3 个条目
  12. [搜索引擎优化] 百度搜索引擎优化指南 3 个条目
窗口 -- [八点]