为旧版 Nginx 添加 UWSGI 支持

为了节省时间与节约生命,鹚最终还是决定 —— 使用 “LNMP一键安装包0.6” 来完成实验。

至于为什么会选择 “LNMP一键安装包0.6” ,原因有两个。

一我是用CentOS做实验,所以没有什么现成的源来安装RPM包。

二嘛,反正是编译安装,鹚看了一下 “LNMP一键安装包0.6” 的安装脚本……

仔细品味了一番,说实话,鹚还没见过写的这么缜密的安装脚本 —— 完美的编译安装 “LNMP生产套件” 方案!

比鹚自己搞的那堆好多了,所以向好的看齐啦。

好吧,鹚的实验目的也很简单:

一、用 Nginx+FastCGI 来驱动 PHP 。

二、同时还要用 Nginx+UWSGI 驱动 Python 。

三嘛, HTTPS+SSL 是雷也打不掉的。

四呢,当然不要忘记为 GHS 做反向代理哈。

所以Nginx任务艰巨啊!

当然一、三、四都比较好解决。

至于,第二点……

其实也好解决,只不过中间会遇到很多意象不到的问题。

好吧,进入正题。

由于 “LNMP一键安装包” 走的是 生产 路线,其追求的是 “稳定可靠,低资源占用 和 可以抗住海量访问” 等。

所以,其选用的 Nginx 版本为 0.7.67 —— 这个超级稳定的版本。

许多大站都是用的这个 Nginx 版本,不信你自己探测一下 github.com 。

旧版的 Nginx 无法直接支持 UWSGI 这个 Python 网关协议,所以我们要 重新编译 Nginx

一、下载 Nginx 和 UWSGI 到 同一目录:

wget http://soft.vpser.net/web/nginx/nginx-0.7.67.tar.gz

wget http://projects.unbit.it/downloads/uwsgi-0.9.7.1.tar.gz

二、将其解压到 同一目录

tar vzfx nginx-0.7.67.tar.gz

tar vzfx uwsgi-0.9.7.1.tar.gz

三、开始重新编译 Nginx:

cd nginx-0.7.67

记得编译参数如下哦(这里是以CentOS为例,注意红色部分):

./configure –user=www –group=www –prefix=/usr/local/nginx –with-http_stub_status_module –with-http_ssl_module –with-http_gzip_static_module –with-ipv6 –add-module=../uwsgi-0.9.7.1/nginx/

这样旧版的 Nginx 0.7.67 就可以支持 UWSGI 了。

生成 Makefile 后请 make 。

然后尤其注意 —— 请勿直接 make install!

四、重新整合 Nginx:

在重新编译完 Nginx 之后,在其 源码目录的 objs 下会生成一个 nginx 的二进制可执行文件,其实说白了,Nginx 就一个单一的可以执行文件而已,而我们就要用它来替换原始的 Nginx 文件啦。

还是先备份一下备份原始的 Nginx 文件吧:

sudo cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak

开始替换:

sudo /root/lnmp stop

sudo cp ./objs/nginx /usr/local/nginx/sbin/nginx

五、替换完毕,进行组建补全:

sudo mkdir /usr/local/nginx/uwsgi_temp        //建立uwsgi缓存。

sudo vi /usr/local/nginx/conf/uwsgi_params        //建立uwsgi配置文件。

然后,由于 Nginx 的 UWSGI 配置文件不是很长,我就在这里贴出来啦:

uwsgi_param  QUERY_STRING       $query_string;
uwsgi_param  REQUEST_METHOD     $request_method;
uwsgi_param  CONTENT_TYPE       $content_type;
uwsgi_param  CONTENT_LENGTH     $content_length;

uwsgi_param  REQUEST_URI        $request_uri;
uwsgi_param  PATH_INFO          $document_uri;
uwsgi_param  DOCUMENT_ROOT      $document_root;
uwsgi_param  SERVER_PROTOCOL    $server_protocol;

uwsgi_param  REMOTE_ADDR        $remote_addr;
uwsgi_param  REMOTE_PORT        $remote_port;
uwsgi_param  SERVER_PORT        $server_port;
uwsgi_param  SERVER_NAME        $server_name;

粘贴到vi之后请 —— :wq!

OK,这样就完成了对 旧版Nginx添加UWSGI支持 。

最后,重启一下LNMP就OK啦:    sudo /root/lnmp restart 。

对了,以后要添加 Python 虚拟主机的话,记得要加上这条哦,现在的 Nginx 可不只是能运行PHP了,还可以运行Python哦(如下示例)!

location / {
include uwsgi_params;
#uwsgi_pass unix:/tmp/uwsgi.sock;
uwsgi_pass 127.0.0.1:8080;
}

好吧,最后鹚想说。。

写这文章累死我了……

About Mucid

My life is brilliant !
This entry was posted in Technology and tagged , , , , , , , . Bookmark the permalink.

64 Responses to 为旧版 Nginx 添加 UWSGI 支持

  1. 重慶大俠 says: Google Chrome 20.0.1132.57 Google Chrome 20.0.1132.57 GNU/Linux x64 GNU/Linux x64

    正好需要python在我的Nginx上,好文章

  2. freetstar says: Google Chrome 11.0.696.57 Google Chrome 11.0.696.57 GNU/Linux x64 GNU/Linux x64

    技术文呢,暂且还不需要折腾这些,先记着了

  3. asics runners says: Firefox 3.6.15 Firefox 3.6.15 Windows XP Windows XP

    看的有点囧~~~~~~

  4. Auston_Jary says: Firefox 4.0 Firefox 4.0 GNU/Linux GNU/Linux

    终于折腾Nginx啦~
    下次讲讲 ipv6 。。。

    貌似你的二级域名跳转也有问题…
    Nginx的conf一直不知咋弄,任何二级域名跳转到主域名除了某些有.conf的