nginx fastcgi spawn-cgi 环境搭建
来源:互联网 发布:耐克鞋淘宝网 编辑:程序博客网 时间:2024/05/29 14:37
在开始webpy搭建之前,有必要熟悉一下什么是fastcgi,因为搭建环境时都是使用这个模式去运行webpy程序的,具体的fastcgi描述可以参考各种百科;fastcgi协议官网(http://www.fastcgi.com/drupal/)上面描述一些基础信息,fastcgi的api、开发,fastcgi的实现程序,支持fastcgi的web服务器等等。
除了fastcgi之外还有一些其他的相关名词:cgi、fastcgi、wsgi。gi是gateway interface的缩写,所以前面3个都是属于一个大类型、一种规范;至于具体规范的谁、怎么规范的会有各自的不同。
cgi和fastcgi规范的都是http server与对应解释程序的之间的通信;比如apache与python、nginx与python等。只是它们规范的方式不一样;cgi是最原始的公用通信协议,它规定的是每次有请求就会新起一个应用进程来处理,在请求结束后关闭应用进程【导致反复新起进程、关闭进程,消耗系统资源】;fastcgi是cgi的扩展,目的就是解决cgi的这种资源消耗的弊端,它规定http server启动时同时启动了若干个应用进程【应用进程数可配置】,然后常驻内存等待接收请求并处理,处理完请求后继续等待不会退出。
由于cgi是直接对接那些有标准输出的应用即可,sh、tcl等;所以使用cgi协议时可以直接调用应用程序来启动应用进程,在执行结束后获得标准输出作为返回的html内容。而fastcgi则实现了固定的通信机制,它不能通过直接调用应用程序来执行结果,所以就需要一个支持fastcgi协议的web server/gateway来与之通信;这样请求就会通过fastcgi进程传输给特定的web请求处理程序【flup】,这个程序会根据业务逻辑处理请求并返回结果;最终通过fastcgi返回给前端的http server。
然后再看看fastcgi和wagi的关系,其实它们没有关系,虽然都是规范,但它们规范的不是一个地方,所以没有直接可关联的,唯一可关联的就是,有些程序会同时实现了这2种协议,比如:flup
fastcgi是通信规范,规定了通信的方式、协议;而wsgi是接口规范,规定了函数定义、调用。
最后还有一个spawn-fcgi,这是一个fastcgi进程管理器【最初是lighttpd的子模块,lighttpd也是一个与nginx类似的http server】,作用等同于其它http server中的fastcgi模块;只不过它实现的比较好、在某些情况下的效能会比较高,所以被大家分离出来广泛使用,以致独立出来作为一个项目。【所以就有了apache+spawn-fcgi、nginx+spawn-fcgi等】
下面总结了一张图,大概覆盖了上面所说的。
通常搭建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配置,添加配置一个虚拟主机,内容如下:
完了重载nginx配置,nginx -s reload,为了保险起见,也可以如下操作:
1、先测试一下nginx.conf文件:./nginx -t
2、没有问题在停止服务 ./nginx -s stop
3、启动服务 ./nginx
此时可以直接访问www.test.com,如果出现如下页面则表示配置nginx的fastcgi格式正确,可以继续后面的配置
运行python程序,python code.py 9002 fastcgi
注:上面的nginx配置文件里配置的是9002,这里开启的就是9002,要保持一致否则就接不上了。
通过浏览器访问localhost,看看是不是返回了Hello, world!
上面是以方式一搭建的,如果使用方式二搭建,则还需要安装spawn-fcgi,然后修改code.py文件的内容,添加一句代码,全部内容如下:
然后启动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[+spawn-fcgi]+flup+webpy服务搭建
- nginx fastcgi spawn-cgi 环境搭建
- Nginx + FastCgi + Spawn-fcgi + C 架构的服务器环境搭建
- Nginx+PHP(FastCGI)环境搭建
- nginx+python+fastcgi环境搭建
- nginx配置spawn-fastcgi执行自己编写的CGI程序(c/c++)
- 转:nginx+CGI/FASTCGI
- (转)CGI、FastCGI、PHP-CGI、PHP-FPM、Spawn-FCGI
- 什么是CGI、FastCGI、PHP-CGI、PHP-FPM、Spawn-FCGI?
- 什么是CGI、FastCGI、PHP-CGI、PHP-FPM、Spawn-FCGI?
- 什么是CGI、FastCGI、PHP-CGI、PHP-FPM、Spawn-FCGI?
- 什么是CGI、FastCGI、PHP-CGI、PHP-FPM、Spawn-FCGI?
- 什么是CGI、FastCGI、PHP-CGI、PHP-FPM、Spawn-FCGI
- 什么是CGI、FastCGI、PHP-CGI、PHP-FPM、Spawn-FCGI?
- 什么是CGI、FastCGI、PHP-CGI、PHP-FPM、Spawn-FCGI?
- 什么是CGI、FastCGI、PHP-CGI、PHP-FPM、Spawn-FCGI?
- CGI、FastCGI、PHP-CGI、PHP-FPM、Spawn-FCGI
- 什么是CGI、FastCGI、PHP-CGI、PHP-FPM、Spawn-FCGI?
- 什么是CGI、FastCGI、PHP-CGI、PHP-FPM、Spawn-FCGI
- Android开发代码格式规范
- java中setSize(),setLocation()和setBounds()的关系
- 3、Spring MVC 之 一些特殊的Bean
- 如何用 C++ 在 10 行内写出八皇后?
- 一般软件开发流程和一般软件的测试原则
- nginx fastcgi spawn-cgi 环境搭建
- POJ-1182 食物链
- 记录JAVA中的反射机制的一些要点
- STC51单片机 利用keil仿真测试代码的运行时间
- 到底什么是nandflash,norflash,sdram,emmc,rom,ram
- Codeforces Round #361 (Div. 2) C. Mike and Chocolate Thieves 二分
- Java的日期修改如增加一天
- Android开源项目分类汇总
- extjs4.2点击树形菜单生成tab页并访问发送请求