经过一番折腾,终于搭建好了能初步使用的Ubuntu+Nginx+uwsgi+MongoDB+Python(LNMP)架构的站点。各种资料,配置过程写到这里,和大家分享也给自己做个备忘。
首先是安装Nginx,Nginx介绍就不再赘述了,可以看它的官网 http://wiki.nginx.org/Main。./configure \ --prefix=/usr/local \ --conf-path=/etc/nginx/nginx.conf \ --pid-path=/var/run/nginx.pid \ --user=nginx \ --group=nginx \ --http-log-path=/var/log/nginx/access.log \ --http-fastcgi-temp-path=/var/lib/nginx/fastcgi \ --http-proxy-temp-path=/var/lib/nginx/proxy \ --http-uwsgi-temp-path=/var/lib/nginx/uwsgi \ --with-http_ssl_module \ --with-http_stub_status_module \ --with-debug \ --with-http_flv_module \ --with-http_gzip_static_module \ --with-ipv6 \ --add-module=~/nginx-gridfs/ make sudo make install
安装好Nginx后,为了解决Python应用程序与nginx之间进行通信,我们还要借助WSGI这种东东,但是这只是一种规范和标准,它的具体实现有多种方式,可参考 http://wiki.python.org/moin/WSGIImplementations 。而我们选用的呢,在这些方式之外...我们使用的是uwsgi,nginx已经默认带了uwsgi协议模块。
关于uwsgi,有人是这样解释的:
uwsgi充当了python解析器的角色,使用wsgi的接口和Python程序交互,这个过程中做了优化,和上层nginx之间则设计了更加轻量的协议。nginx0.8.40以后官方默认带了uwsgi的协议模块,所以使用很方便。
并且网上还有个比较性能的柱状图,如下
uWSGI的主要特点:
◆超快的性能。
◆低内存占用(实测为apache2的mod_wsgi的一半左右)。
◆多app管理。
◆详尽的日志功能(可以用来分析app性能和瓶颈)。
◆高度可定制(内存大小限制,服务一定次数后重启等)。
想了解更多关于uwsgi,那就登录官网吧http://projects.unbit.it/uwsgi/wiki 。
下面安装uwsgi,同样从官网下载源代码,采用手动编译的方式。我的uWSGI版本号是0.9.9.1,所以只在源代码文件夹目录下
make
然后就生成了uwsgi可执行文件,为方便使用将这个文件拷贝到/usr/local/sbin下。添加运行uwsgi的用户,
adduser --system --no-create-home --disabled-login --disabled-password --group uwsgi
Nginx和uWSGI都安装好了之后,就该配置它们了,配置之前,假设你已经有了一个Python应用程序。我的是Django应用,系统目录为/var/www/my_django/
为避免每次运行uwsgi输入命令的不便,我将uwsgi的配置写在了一个xml文件中,文件名uswgi.xml,内容如下:
<uwsgi> <socket>127.0.0.1:3031</socket> <master>true</master> <pidfile>/var/lib/nginx/uwsgi/uwsgi.pid</pidfile> <gid>uwsgi</gid> <uid>uwsgi</uid> <processes>4</processes> <pythonpath>/var/www/my_django</pythonpath> <!--Django应用目录--> <module>wsgi</module> <!--Django应用目录下包含的wsgi.py文件名,--> <profiler>true</profiler> <memory-report>true</memory-report> <enable-threads>true</enable-threads> <logdate>true</logdate> <limit-as>512</limit-as> </uwsgi>
import sys import os sys.path.append('/var/www/my_django') os.environ['DJANGO_SETTINGS_MODULE']='?' #?这个路径也要填的啊 import django.core.handlers.wsgi application = django.core.handlers.wsgi.WSGIHandler()下面开始配置nginx,我的配置文件在/etc/nginx/目录下
配合uwsgi的设置,nginx.conf必要设置如下:
location / { root /var/www/my_django; uwsgi_pass 127.0.0.1:3031; include uwsgi_params; }
最后,运行
uwsgi -x /路径/uwsgi.xml
再运行 nginx 就可以了,可以看看你的django应用可不可以访问了^_^