探索lighttpd用fastcgi模式访问django

用了十多年IIS和Apache,感觉那些大家伙都笨重无比。而现代网站也不是十多年前几个静态html加上一二个CGI就可以打发的。于是出现了 无数开发框架,要求服务器只要提供最简单,最专业的功能 - 把web request分发到特定程序去处理,再把结果返回给用户 - 这个功能几句python命令就可以实现,不过我们需要专业的处理机制,比如内存,CPU管理。和CGI不同,FastCGI调用方式是socket,程 序本身可以有状态;传统CGI由服务器执行,每次request都运行一遍。显然对于使用现代框架结构的比较复杂的网站来说,FastCGI的效率要高。 一个为FastCGI优化的现代化服务器代表就是lighttpd。所以即使Apache开始支持FastCGI,我还是选择lighttpd。

 

下面是一个典型的lighttpd的配置,使用了fastcgi。


$HTTP["host"] == "www.company.com" { #侦听这个网站
server.document-root = "/home/company/web" #网站根目录
server.dir-listing = "disable" #不要列出文件
fastcgi.server = (
    "/fcgi.sh" => ( #fcgi使用的文件
        "main" => (
            "socket" => "/home/company/web/fcgi.sock", #socket文件用来作为通讯管道
            "check-local" => "disable",
        )
    ),
)

url.rewrite-once = (                     
    "^(/.*)$" => "/fcgi.sh$1/ ", #网址处理方法,最后红色的slash如果不加则访问时url最后一定要有slash,否则出现404错误。
)
}

 

运 行sudo /etc/init.d/lighttpd restart后配置生效,服务器将侦听来自www.company.com的请求。任何请求都由表达式"^(/.*)$"来决定如何处理。此处的正则式 将www.company.com/...后所有内容交给fcgi.sh来处理。交给fcgi.sh的方式是socket,我们用/home /company/web/fcgi.sock的socket文件作为管道。当然自己可以定义ip,port之类的参数,只要和fcgi.sh的配置符合 就可以了。

 

下面是fcgi.sh内容:

 

#!/bin/bash

# Replace these three settings.
PROJDIR="/home/company/web"
PIDFILE="$PROJDIR/fcgi.pid"
SOCKET="$PROJDIR/fcgi.sock"

cd $PROJDIR
if [ -f $PIDFILE ]; then
    kill `cat -- $PIDFILE`
    rm -f -- $PIDFILE
fi

exec /usr/bin/env - /
  PYTHONPATH="/usr/bin/python" /
  . manage.py runfcgi daemonize=false socket=$SOCKET pidfile=$PIDFILE

这 个bash文件只是要把服务跑起来,再产生一些副产品:fcgi.sock和fcgi.pid。sock用来和fastcgi服务器通讯,pid文件则是 让kill起来方便些。最后一个命令才是主要目的。它告诉django注意,要以fcgi模式运行拉。再传些参数进去。

 

我 们需要手工来运行fcgi.sh。比如$. fcgi.sh &让这个程序在后台运行。$ps aux可以看到多出来几个python进程。此时django已经在fcgi模式下运行。要使用django的fcgi模式先要安装flup,这个库包装 了很多fcgi协议,django可以安心处理该处理的事物。

 

在运行中有错误发生,可以看/var/log/lighttpd/error.log。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值