nginx+webpy配置

  以前搞app时候学的webpy,一直用的自带webserver,最近研究nginx一段时间,决定两者结合玩一下~html

  把搭建的要点总结下,说不定哪天还得用——其实平时手挺懒的...python

  1 必备模块和背景知识nginx

   pcre,flup,nginx,webpy,spawn-fcgiweb

     pcre是nginx安装前提;安装pcre后configur enginx时带--with-pcre=path,path为pcre源码路径(不是安装路径哦)。apache

   fastcgi , 通讯规范,规定了通讯的方式、协议;而wsgi是接口规范,规定了函数定义、调用,至关于一组 Python API,提供了对 FastCGI (及其它)协议的支持。django

   spawn-fcgi , fastcgi进程管理器,最初是lighttpd的子模块,lighttpd也是一个与nginx相似的http server,做用等同于其它http server中的fastcgi模块;只不过它实现的比较好、在某些状况下的效能会比较高,因此被你们分离出来普遍使用,以至独立出来做为一个项目。因此就有了apache+spawn-fcgi、nginx+spawn-fcgi等.浏览器

     flup, 一个用python写的web server,也就是cgi中所谓的Server/Gateway,它负责接受lighttpd转发的请求,并调用你写的程序 (application),并将application处理的结果返回到apache/lighttpd.cookie

     web.py,应该说有了上面的东西你就能够开始编写你的web程序了,可是问题是你就要本身处理浏览器的输入输出,还有cookie、session、模板等各类各样的问题了,web.py的做用就是帮你把这些工做都作好了,它就是所谓的web framework,另一个出名的是django,不过感受太复杂了,web.py差很少就够用了(目前web.py对session的支持不是太好)。session

  他们关系以下,app

  

2 配置过程

   通通略,见参考文献2和3

 

3 源码注解

  大致请参考4,研读中请务必弄清楚几个知识点:进程会话,粘滞位,dup2函数等,不然会被不少非核心代码搞蒙。

  其实,核心的代码就在这,

close(FCGI_LISTENSOCK_FILENO);
dup2(fcgi_fd, FCGI_LISTENSOCK_FILENO);
close(fcgi_fd);  

以后的exec操做,子进程都会继承FCGI_LISTENSOCK_FILENO,而后会在这上面accept(这天然是flup操做wsgi了),而后会写回accept的句柄,nginx就会受到响应的。

 

参考文献:

1 nginx配置大全中文   http://my.oschina.net/duxuefeng/blog/34880

2 webpy官方配置建议  http://webpy.org/cookbook/fastcgi-nginx.zh-cn

3 一个中文配置示例   http://blog.csdn.net/five3/article/details/7732832

4 spawn-fcgi源码     http://chenzhenianqing.cn/articles/936.html

相关文章
相关标签/搜索