http://www.nowamagic.net/academy/detail/1330334

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

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

Nginx 配置

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

01 server {
02     listen       80;
03     server_name  115.28.0.89;
04     #server_name localhost;
05  
06     access_log /home/nowamagic/logs/access.log;
07     error_log /home/nowamagic/logs/error.log;
08  
09     #root         /root/nowamagic_venv/nowamagic_pj;
10     location / {
11         uwsgi_pass 127.0.0.1:8077;
12         #include uwsgi_params;
13         include /etc/nginx/uwsgi_params;
14         #uwsgi_pass 127.0.0.1:8077;
15         #uwsgi_param UWSGI_SCRIPT index;
16         #uwsgi_param UWSGI_PYHOME $document_root;
17         #uwsgi_param UWSGI_CHDIR  $document_root;
18    }
19    access_log off;
20 }

注意保证配置里写的目录 /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 目录下

01 <uwsgi>
02  <socket>127.0.0.1:8077</socket>
03  <listen>80</listen>
04  <master>true</master>
05  <pythonpath>/root/nowamagic_venv/nowamagic_pj</pythonpath>
06  <processes>1</processes>
07  <logdate>true</logdate>
08  <daemonize>/var/log/uwsgi.log</daemonize>
09  <plugins>python</plugins>
10 </uwsgi>

然后执行命令:

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

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

1 uwsgi --xml /etc/nowamagic.xml

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

1 uwsgi /etc/nowamagic.xml

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

2. ini 配置

01 [uwsgi]
02 vhost = false
03 plugins = python
04 socket = 127.0.0.1:8077
05 master = true
06 enable-threads = true
07 workers = 1
08 wsgi-file = /root/nowamagic_venv/nowamagic_pj/nowamagic_pj/wsgi.py
09 virtualenv = /root/nowamagic_venv
10 chdir = /root/nowamagic_venv/nowamagic_pj

然后执行命令:

1 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,执行:

1 python
2 <<< import django
3 <<< from django.core.wsgi import get_wsgi_application
4 <<<

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

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

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

1. 关闭 uWSGI:

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

2. 列出端口占用情况:

1 netstat -lpnt

uWSGI其三:uWSGI搭配Nginx使用的更多相关文章

  1. Nginx、WSGI、 uWSGI、 uwsgi的区别

    当我们部署完一个应用程序,浏览网页时具体的过程是怎样的呢?首先我们得有一个 Web 服务器来处理 HTTP 协议的内容,Web 服务器获得客户端的请求,交给应用程序,应用程序处理完,返回给 Web 服 ...

  2. 10 腾讯云、django2.0、uwsgi、mysql、nginx 部署

    1.腾讯云 操作系统 Ubuntu Server 16.04.1 LTS 64位 获取root权限 ubuntu@VM---ubuntu:~$ sudo passwd root Enter new U ...

  3. uWSGI、uwsgi、WSGI、之间的关系,为什么要用nginx加uWSGI部署。

    WSGI 协议 WSGI:是一种协议规范,起到规范参数的作用,就像告诉公路一样,规定超车靠右行,速度不低于90km/h,等.但这一切都是对双方进行沟通,比如,重庆到武汉这条高速路,这儿重庆和武汉就各为 ...

  4. 浅析uWSGI、uwsgi、wsgi

    WSGI协议 首先弄清下面几个概念: WSGI:全称是Web Server Gateway Interface,WSGI不是服务器,python模块,框架,API或者任何软件,只是一种规范,描述web ...

  5. WSGI、uwsgi和uWSGI

    一.WSGI WSGI ( Web Server Gateway Interface )是一个网络服务器和网络应用的通用接口的规范或者用于Python框架. 由于python开发人员在网络框架的选择限 ...

  6. fastfdfs搭配nginx

    fastfdfs搭配nginx 下载fastdfs-nginx-module 模块 wget https://github.com/happyfish100/fastdfs-nginx-module/ ...

  7. 区分wsgi、uWSGI、uwsgi、php-fpm、CGI、FastCGI

    在学习Python web开发时候,可能会遇到诸如uwsgi,wsgi等名词,下面通过梳理总结探究它们之间的关系. CGI CGI,(Common Gateway Interface)通用网关接口,是 ...

  8. 认识uWSGI、uwsgi、wsgi

    WSGI协议 首先弄清下面几个概念: WSGI:全称是Web Server Gateway Interface,WSGI不是服务器,python模块,框架,API或者任何软件,只是一种规范,描述web ...

  9. python Web中WSGI uWSGI 以及 uwsgi的区别

    WSGI协议 首先弄清下面几个概念: WSGI:全称是Web Server Gateway Interface,WSGI不是服务器,python模块,框架,API或者任何软件,只是一种规范,描述web ...

随机推荐

  1. unity shader在小米2s上的问题

    一个很简单的用mask裁剪图片的效果: mask: 被裁剪图片: 正确的效果: 在小米2s上测,其中有一台小米2s出现花屏: 手机型号: shader如下: Shader "UI/Trans ...

  2. OpenJudge计算概论-二维数组右上左下遍历

    /*====================================================================== 二维数组右上左下遍历 总时间限制: 1000ms 内存 ...

  3. OpenJudge计算概论-球弹跳高度的计算

    /*======================================================================== 球弹跳高度的计算 总时间限制: 1000ms 内存 ...

  4. VB的if和elseif

    VB中if和elseif的用法是: if...then...elseif...then...else...endif 切记在then的后面不要加冒号,加了冒号出现else没有if的错误,因为加了冒号表 ...

  5. ExpandableListView方法详解

    正文 一.结构public interface ExpandableListAdapter 间接子类:BaseExpandableListAdapter,CursorTreeAdapter,Resou ...

  6. 简单实现JS Loading功能

    我们经常在浏览网页的时候会看到数据在加载时,出现的LOADING提示.其实这个功能原理是很简单的,就是一个DIV遮盖当前页面,然后Loading就在遮盖DIV层上展示出来,现在我们来动手实现一下. 1 ...

  7. 解决Navicat无法连接Oracle的问题

    G:\app\hoge\product\11.2.0\dbhome_3\BIN

  8. elasticsearch 跨网段组集群

    elasticsearch 是非常流行的全文搜索引擎,但网上的教程多是初次使用,并没有一些高级用法demo.这次遇到需要跨网段组网问题,自己摸索了文档很久,发现确实可行,于是着手做了个实验,最终实验成 ...

  9. smarty函数

    内置函数(重要的几个): <{html_checkboxes name='nation' values=$code output=$name selected=$selid separator= ...

  10. RHCE7.0练习题汇总[转]

    RHCE7.0练习题汇总38 RHCSA部分 关于密码破解,在上午的考试中需要我们自己安装图形化界面和破解root密码,root的密码按照题目的要求来进行修改.可以使用单用户模式或者使用上课讲的re. ...