nginx python spawn-fcgi Flup webpy搭建python的web环境

来源:互联网 发布:收音机mac版 编辑:程序博客网 时间:2024/06/04 20:07

在以前的很多文章中,都见到直接利用nginx的代理直接进行负载均衡的做法(在我的上一文章中有讲到),其实这样做有一个缺陷,就是在nginx范围需要开多个端口进行挂载,且没有统一的启动命令,思来想去还是利用web.py和flup其实搭建比较简单,同时可以建立统一shell文件进行测试,而且可以自动增加进程的并发数

参考资料: http://webpy.org/cookbook/fastcgi-nginx (web.py提供的参考资料) 可按照这个设置app和对应的~

                  http://hi.baidu.com/semmin/item/4790a90ea9e10a7cbee97ed9 (搭建过程中的一些故障问题)

                  1.problem spawn-fcgi child exited with 126:

                    index.wsgi 脚本缺少执行权限。 chmod +x 文件名 解决

                  2.problem spawn-fcgi child exited with 2

                      index.wsgi不知道用哪个脚本来执行 可以禁用 web.wsgi.runwsgi = lambda func, addr=None: web.wsgi.runfcgi(func, addr)

                     直接 app.run() 来查看是否有问题

                    或者 执行 spawn-fcgi -d /var/www/html/ftp/pubftp -f /var/www/html/ftp/pubftp/index.py -a 127.0.0.1 -p 9090 -n (增加-n来查看错误明细)

                 3.problem spawn-fcgi child exited with 1:

                   可能是你的wsgi脚本有语法错误,可以尝试用python 直接执行index.wsgi检查一下。

                http://hi.baidu.com/%C1%AC%BF%B419%BC%AF/blog/item/40fc684c6b76d9ebd72afcf4.html (各种软件包的安装和nginx的配置以及启动和处理【有的可以使用yum】)


环境依赖的软件包

    Nginx 0.8.* or 0.7.* (需要包含fastcgi和rewrite模块)。
    Webpy 0.34
    Spawn-fcgi 1.6.2
    Flup

安装webpy
$ wget http://webpy.org/static/web.py-0.34.tar.gz
$ tar xvzf web.py-0.34.tar.gz
$ cd web.py-0.34
$ sudo python setup.py install

安装 Flup
http://www.saddi.com/software/flup/dist/flup-1.0.2.tar.gz
$ wget http://www.saddi.com/software/flup/dist/flup-1.0.2.tar.gz
$ tar xvzf flup-1.0.2.tar.gz
$ cd flup-1.0.2.tar.gz
$ sudo python setup.py install

安装 Spawn-fcgi
wget http://www.lighttpd.net/download/spawn-fcgi-1.6.3.tar.gz
tar zxvf spawn-fcgi-1.6.3.tar.gz
cd spawn-fcgi-1.6.3.tar.gz
./configure --prefix=/usr设置到/usr
make && make install # install
安装Nginx
源码包可以在官方主页上下载。Ubuntu 7.10可以直接通过apt安装,也可以从这里下载最新的deb包:
sudo apt-get install nginx
如果要自己编译的话,需要确保自己已经有编译器和PCRE的库(用于Nginx的rewrite模块,如果不需要这个模块可以在configure时使用./configure –without-rewrite)。

编译方法如下:
wget http://sysoev.ru/nginx/nginx-0.5.34.tar.gz
tar zxvf nginx-0.5.34.tar.gz
cd nginx-0.5.34
./configure #默认配置安装路径为/usr/local/nginx 可以追加--prefix=/usr设置到/usr
make && make install # install要求有root权限
Nginx 配置文件

location / {
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;  # [1]
    fastcgi_param PATH_INFO $fastcgi_script_name;        # [2]
    fastcgi_pass 127.0.0.1:9002;
}

对于静态文件可以添加如下配置:

location /static/ {
    if (-f $request_filename) {
    rewrite ^/static/(.*)$  /static/$1 break;
    }
}

重启nginx配置:
/path/to/nginx/sbin/nginx -s reload

停止nginx:
/path/to/nginx/sbin/nginx -s stop

Spawn-fcgi

可以通过一下命令启动一个Spawn-fcgi进程:


sudo /usr/local/spawn-fcgi/bin/spawn-fcgi -d /usr/local/nginx/cgi/ -f /usr/local/nginx/cgi/test.py -a 127.0.0.1 -p 9002 -P /tmp/webpy.pid

将进程PID保存下来方便关闭进程:

kill `cat /tmp/webpy.pid`

参数说明:

-f 指定调用 FastCGI 的进程的执行程序位置,根据系统上所装的 PHP 的情况具体设置
-a 绑定到地址 addr
-p 绑定到端口 port
-F 指定产生的 FastCGI 的进程数  (很多人以为是-C,其实那是PHP专用的,这里要用-F)
-P 指定产生的进程的 PID 文件路径
-u 和 -g FastCGI 使用什么身份运行

 

如果运行Spawn-fcgi之后,ps -ef 不能发现进程,sudo netstat -antup不能发现端口说明Spawn-fcgi没有正常启动,可以在启动参数中加 -n 之后再启动会有详细信息.问题也就找到了.

             



原创粉丝点击