給阿怪 Lighttpd + Fastcgi + Django
我的環境
Debian testing
Python 2.5.2
MySQL 5.0.51a
Lighttpd 1.4.19
Django Django version 0.97-pre-SVN-7480
Django 專案位址,您要對應您自己的位址
/home/terry/digez
Python 的部份
要安裝 python-flup
Django 的部份
一般只要把 django 用 fastcgi 的方式跑起來,即可
在命令列執行方式,其中 socket 還有 pidfile 可以放在你喜歡的地方,注意權限沒有問題就可以,也可以用 TCP 的方式執行 fastcgi
可以在命令列下打 ./manage.py help runfcgi 得到更多的提示
/home/terry/digez/manage.py runfcgi socket=/home/terry/run/digez.sock pidfile=/home/terry/run/digez.pid
您可以把執行的方式,寫成 Linux 或是 FreeBSD 下的 init.d 的執行方式,也可以用 supervisord 的方式來監控啟動
init.d 的方式可以參考 http://code.djangoproject.com/wiki/InitdScriptForDebian
Lighttpd 的部份
至少必須把 fastcgi 的模組啟動
在 Debian 的環境下,用 root的權限,在命令列下打
lighttpd-enable-mod
來啟動,下面是我執行的結果
terry:# lighttpd-enable-mod
Available modules: auth cgi fastcgi proxy rrdtool simple-vhost ssi ssl status userdir
Already enabled modules: fastcgi simple-vhost
Enable module:
下面則是在 Lighttpd 下,我設的 virtual host,我所有的主機都是設定 virtual host 的方式
下面是整個 virtual host 的設定檔,我的環境下是放在 /etc/lighttpd/conf-enabled/10-simple-vhost.conf
有井字號開頭的,整行是註解
在這裡面要注意的是 socket file 的權限,如果是 執行 Lighttpd 的 user 是 www-data 的話,socket 檔案的權限就要是 www-data 可以的讀寫
設定裡那個叫 /mysite.fcgi 的檔案,是假的,不必真實存在
## Simple name-based virtual hosting
##
## Documentation: /usr/share/doc/lighttpd-doc/simple-vhost.txt
## http://www.lighttpd.net/documentation/simple-vhost.html
server.modules += ( “mod_simple_vhost” )
## The document root of a virtual host isdocument-root =
## simple-vhost.server-root + $HTTP[“host”] + simple-vhost.document-root
simple-vhost.server-root = “/var/www”
simple-vhost.document-root = “/blog/"
simple-vhost.default-host = “home.digez.com”
$HTTP[“host”] = “^(home.digez.com|stock.digez.com)$” {
server.document-root = “/home/terry/digez”
fastcgi.server = (
“/mysite.fcgi” => (
“main” => (
# Use host / port instead of socket for TCP fastcgi
#“host” => “127.0.0.1”,
#“port” => 8080,
“socket” => “/home/terry/run/digez.sock”,
“check-local” => “disable”,
)
),
)
alias.url = (
“/media/” => “/home/terry/django_src/django/contrib/admin/media/”,
“/site_media/” => “/home/terry/media/”,
)
url.rewrite-once = (
“^(/media.)$” => “$1”,
“^(/site_media.)$” => “$1”,
“^/favicon.ico$” => “/site_media/images/favicon.ico”,
“^(/.*)$” => “/mysite.fcgi$1”,
)
}
以上Lighttpd 設定更改過後,該重新啟動的要啟動過後才會生效,有關於 Lighttpd 設定還有多進階的方法,可以幫我們擋攻擊,或是增加效能 ;-)