nginx+spawn-fcgi+flup+webpy服务搭建

转自http://blog.csdn.net/five3/article/details/7732832


webpy环境搭建

在开始webpy搭建之前,有必要熟悉一下什么事fastcgi,因为搭建环境时都是使用这个模式去运行webpy程序的,具体的fastcgi描述可以参考各种百科;fastcgi协议官网(http://www.fastcgi.com/drupal/)上面描述一些基础信息,fastcgi的api、开发,fastcgi的实现程序,支持fastcgi的web服务器等等。

了解了fastcgi后还要了解与其相关的几个名称的解释,包括像cgi,wsgi等;简单来说cgi,fastcgi,wsgi都是定义的一类协议,实现了这些协议规则的程序就能够使用相应的服务。cgi的实现程序直接在web服务中实现即可;fastcgi除了web服务器需要支持,还需要第三方支持,即在web程序中需要有对应的类库,比如php-cgi;wsgi也是同样的需要第三方实现,比如flup。通常来说只要有这几个部分就能组成fastcgi的运行模式了,但是为了更好的管理fastcgi,所以又开发出了一个独立的fastcgi管理程序,用来专门管理fastcgi、wsgi进程,比如spawn-fcgi。下面的图是描述的这个他们的关系:

nginx+spawn-fcgi+flup+webpy服务搭建_第1张图片


通常搭建webpy都是想使用它的fastcgi模式,因此搭建webpy可以有2套方式运行:一是web服务+flup,二是web服务+spawn-fcgi+flup。又因为spawn-fcgi只有linux版本,所以windows下只能使用第一种方式搭建webpy,而linux下则可以使用第二种方式。下面内容简述了这2种方式的搭建过程,web服务器使用的是nginx,官网更多webpy服务的搭建见http://webpy.org/cookbook/index.zh-cn 部署章节,里面还包括apache、lighttpd等服务器的fastcgi搭建。

1、资源下载
python下载地址:
http://www.python.org/
webpy下载地址:
http://webpy.org/
flup下载地址:
http://trac.saddi.com/flup
nginx下载地址:
http://nginx.org/en/download.html
spawn-fcgi下载地址:
http://redmine.lighttpd.net/projects/spawn-fcgi/news

2、nginx配置熟悉
因为使用nginx服务,所以有必要先熟悉一下nginx服务器的简单配置,否则配置过程中出现问题时就会手忙脚乱了,安装完成nginx后其默认的配置文件里会有几种默认配置和注释说明,不过是英文的,这里有一个比它更详细的中文版:http://my.oschina.net/duxuefeng/blog/34880 
注: 修改前先备份一个原始的文件


3、环境部署
webpy官网搭建说明见: http://webpy.org/cookbook/fastcgi-nginx.zh-cn
python、webpy、flup、nginx分别默认安装即可,完成后测试各软件默认安装是否正常,如果正常则开始修改nginx配置,配置一个虚拟机,内容如下:
[python]  view plain copy
  1. location / {  
  2.     include fastcgi_params;   ##包含默认的fastcgi参数  
  3.     fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;    
  4.     fastcgi_param PATH_INFO $fastcgi_script_name;         
  5.     fastcgi_pass 127.0.0.1:9002;                  ##把请求通过fastcgi传送给本机的9002端口  
  6. }  
  7.   
  8. location /static/ {                    #配置静态文件的访问  
  9.     if (-f $request_filename) {        #如果请求文件名是一个文件  
  10.     rewrite ^/static/(.*)$  /static/$1 break;   #直接跳转到对应的资源,中断fastcgi的传输  
  11.     }  
  12. }  
完了重载nginx配置,nginx -s reload

新建一个py文件,比如code.py,用来接收web请求并处理之,其内容可以如下:
[python]  view plain copy
  1. #!/usr/bin/env python  
  2. # -*- coding: utf-8 -*-  
  3.   
  4.   
  5. import web  
  6.   
  7.   
  8. urls = ("/.*""hello")  
  9. app = web.application(urls, globals())  
  10.   
  11.   
  12. class hello:  
  13.     def GET(self):  
  14.         return 'Hello, world!'  
  15.   
  16.   
  17. if __name__ == "__main__":  
  18.     app.run()  
运行python程序,python code.py 9002 fastcgi
注: 上面的nginx配置文件里配置的是9002,这里开启的就是9002,要保持一致否则就接不上了。
通过浏览器访问localhost,看看是不是返回了Hello, world!


上面是以方式一搭建的,如果使用方式二搭建,则还需要安装spawn-fcgi,然后修改code.py文件的内容,添加一句代码,全部内容如下:
[python]  view plain copy
  1. #!/usr/bin/env python  
  2. # -*- coding: utf-8 -*-  
  3.   
  4.   
  5. import web  
  6.   
  7.   
  8. urls = ("/.*""hello")  
  9. app = web.application(urls, globals())  
  10.   
  11.   
  12. class hello:  
  13.     def GET(self):  
  14.         return 'Hello, world!'  
  15.   
  16.   
  17. if __name__ == "__main__":  
  18.     web.wsgi.runwsgi = lambda func, addr=None: web.wsgi.runfcgi(func, addr)   ##这行是新增的  
  19.     app.run()  

然后启动spawn-fcgi程序即可,即不需要直接以fastcgi方式运行code.py文件,而是通过运行spawn-fcgi程序来间接启动code.py程序,启动的命令如下:
spawn-fcgi -d /path/to/www -f /path/to/www/code.py -a 127.0.0.1 -p 9002   #端口和nginx配置里要一致
-f 指定调用FastCGI的web文件,web程序的入口文件,即code.py文件
-d 指定web程序的主目录,即code.py所在的目录
-a 绑定到地址 addr
-p 绑定到端口 port
-F 指定产生的 FastCGI 的进程数
-P 指定产生的进程的 PID 文件路径
-u 和 -g FastCGI 使用什么身份运行
可以将进程PID保存下来方便关闭进程:
kill `cat /tmp/zcut.pid`

比如:
spawn-fcgi -u www -g www -p /tmp/spwn.pid -F 10 -d /path/to/www -f /path/to/www/code.py -a 127.0.0.1 -p 9002
在127.0.0.1的9002端口以www身份启动webpy服务,webpy主程序路径为/path/to/www/code.py,webpy的程序主目录为/path/to/www/,总共启动了10个spawn进程,所有的进程id将存放在/tmp/spwn.pid文件里


参考文章:
webpy指南:
http://webpy.org/cookbook/index.zh-cn
CGI,FastCGI,WSGI,flup,spawn-fcgi之间的关系
http://lihuipeng.blog.51cto.com/3064864/890573
Windows下安装nginx+webpy+flup
http://blog.csdn.net/yavobo/article/details/6213063

你可能感兴趣的:(nginx,windows,python,cgi,lighttpd,web服务)