博文实践操作平台:

ubuntu10.10

   如果说要简单的部署基于Django框架的web服务,大抵apache+mod_python就够了。但是apache+fastcig部署的模式由于自身的局限性,使得这种部署方式只适用于并发量少的性能要求较低的服务。现在市场上比较流行的另一种呢?从一定程度上说,它可以解决apache+mod_python这种方式的部分缺陷。这就是nginx+uwsgi+Django.

   如果说你已经了解NUD的好处,并打算从头开始学习它,那么我的分享可能值得你一试。

   我还是先来简单讲一下NUD个各部分之间的关系吧;

NGINX:这是一个可以独立运行的web服务器。它上面不仅可以跑web服务,而且还可以跑mail或者其他服务(没试验配置过)。上网收一下你就会知道。NGNIX会有诸多好的性能。在这儿NGINX就是一个简单的web服务器。注意:他不是tomcat那样是个容器,它不是容器!!!至于它的特殊之处我后面会说;

UWSGI:uwsgi是CGI的一种。也是可以独立运行的。自然是一种类CGI,那么自然他能给处理我们的请求。并启动DJango框架。

DJango:开发框架。

三者之间的关系是怎么样的呢?

首先,服务器跑着nginx,ugwsi(它们都是独立运行的嘛,装上就可以启动了)。如果你已经配置NUD了。当这两个服务启动的时候。基于Django开发的APP将被UWSGI服务Hood住。当一个请求到达Nginx的时候。nginx接受该请求。并在我们的配置文件中找到请求的URI是要被转向UWSGI服务。那么这个服务将被格式化后转到UWSGI了。

UWSGI收到该格式化的请求后呢? 它将会启动新的进程(有可能是进程池里面调度一个)去解析我们的请求。

UWSgI在启动的时候,它会监听在本地的某个端口,可能是UNIX套接字。负责接受Nginx转过来的请求。那么为什么还要使用nginx呢,单端运行uwsgi不行吗?这肯定是不行的。首先,nginx可以为我们提供它的很多优秀的性能。比如说抵消后,高并发,以及良好的负载均衡性能。其次,uwsgi是类CGI的一种,他接受的是标准的请求格式,它不能直接接受我们发出的HTTP请求。

大概了解的一下原理,下面就是一些基本的配置:

首先要配置的是uwsgi,这里需要创建uwsgi的配置文件,在django的根目录添加一个.xml文件,可以命名为config.xml.写入如下内容:

<?xml versiong="1.0" encodong:"utf-8"?>

<uwsgi>

  <socket>127.0.0.1:9999</socket>

  <module>wsgi</module>

</uwsgi>

其中127.0.0.1:9999是uwsgi启动是监听的地址。这儿是本机的9999端口。

Module就是app中需要给出的官员怎么让uwsgi来hook住django app;

我现在在同一目录下面新建一个wsgi.py的文件。写入如下Python代码:

import os,sys

if not os.path.dirname(__file__) in sys.path[:1]:

    sys.path.insert(0,os.path.dirname(__file__))

os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'

from django.core.handlers.wsgi import WSGIHandler

application = WSGIHandler()

 

这里面,需要将app的settings全局配置模块假如到PYTHON_PATH.一边Py解释器能够找到。然后改脚本创建一个SGI处理器。当我们启动UWSGI服务的时候将我们创建的配置文件指定给服务进程。那么UWSGI服务就能Hook住app了。

接下来配置nginx:

1,找到NGINX的配置我恩见nginx.conf,通过apt安装的服务程序中,这个为文件位于:

/etc/nginx/nginx.conf

如果只是简单的使用,不做服务器性能优化,不做负载均衡和其他高级操作。仅仅是使这个web跑起来。那么只需要在这个文件中加入一个虚拟主机配置节点就行了:

server{

    listen 80;

    index index.html

    location /{

        uwsgi_pass 127.0.0.1:9999;

        include uwsgi_params;

    }

}

需要说明一下,listen端口中,如果要对客户端开放web服务。那么直接写80即可。如果只对本机或者某机器开发。那么需要这样ip:port

index 不用讲了是索引

location 节点是告诉我们这么处理特定的请求。本配置例子中对所有80端口的请求都会转向uwsgi服务。127.0.0.1:9999就是我在congfig.xml中的配置地址了。

 

最后就是这样启动服务了:

1,启动uwsgi服务,运行如下命令:

uwsgi -x config.xml文件的路径--绝度路径

 

2,启动nginx,运行如下命令:

nginx

或者 service nginx start

完毕!