django的lighttpd+fastcgi方式部署

蒙勇
2023-12-01
参考了robbin在 《Linux 平台上安装和配置 Ruby on Rails 详解》 的部分内容:http://www.iteye.com/topic/43228
本文假定已正确安装python和django,系统为ubuntu9.04

light footprint + httpd = Lighttpd 可以读成Lighty,是由德国人 Jan Kneschke 领导开发的,基于BSD许可的开源WEB服务器软件,其根本的目的是提供一个专门针对高性能网站,安全、快速、兼容性好并且灵活的web server环境。具有非常低的内存开销,CPU占用率低,效能好,以及丰富的模块等特点。Lighttpd 是众多OpenSource轻量级的web server中较为优秀的一个。支持FastCGI, CGI, Auth, 输出压缩(output compress), URL重写, Alias等重要功能。因此对于那些负载非常高的WEB服务器选用 Lighttpd 会是非常完美的解决方案。

1.安装lighttpd
如果你用的是ubuntu,用命令sudo apt-get install lighttpd即可。从源码安装的方法如下:
解压安装文件(eg:lighttpd-1.5.0-r1691.tar.gz)并切换到该目录,在终端执行:

./configure --prefix=/usr/local/lighttpd
make
sudo make install

其中prefix参数指定lighttpd的安装路径
安装后配置:

sudo cp doc/rc.lighttpd /etc/init.d/lighttpd
sudo mkdir /etc/lighttpd
sudo cp doc/lighttpd.conf /etc/lighttpd/lighttpd.conf
sudo gedit /etc/init.d/lighttpd

将启动脚本换为ubuntu系统的,内容见:http://redmine.lighttpd.net/wiki/1/ScriptsUbuntu
2.配置lighttpd

sudo gedit /etc/lighttpd/lighttpd.conf

server.modules:取消如下模块的注释mod_rewrite,mod_access,mod_fastcgi,mod_simple_vhost,mod_accesslog
其中mod_fastcgi应在mod_rewrite,mod_access之后,在mod_accesslog之前
#server.document-root指向你的django项目的目录
#例如我在/home/ruby目录下django-admin.py startproject mysite,那么server.document-root = "/home/ruby/mysite"
server.document-root = "/home/ruby/mysite"
fastcgi.server = (
#这里mysite.fcgi文件可以不存在,可任意命名,但要和下文(url.rewrite-once)保持一致
"/mysite.fcgi" => (
"main" => (
# Use host / port instead of socket for TCP fastcgi
#指定重定向的django的访问由谁来处理,这里host和port要和运行fcgi的参数对应
#如以如下参数运行fcgi:./manage.py runfcgi method=threaded host=127.0.0.1 port=3033
"host" => "127.0.0.1",
"port" => 3033,
#"socket" => "/home/ruby/mysite/mysite.sock",
"check-local" => "disable",
)
),
)
alias.url = (
#指向admin的midia文件夹,当然你也可以在项目主目录下建立该文件夹的符号链接,则该参数指向项目主目录
"/media/" => "/path/to/django_home/django/contrib/admin/media/",
)
url.rewrite-once = (
"^(/media.*)$" => "$1",
"^/favicon\.ico$" => "/media/favicon.ico",
"^(/.*)$" => "/mysite.fcgi$1", #$1是传给django的fcgi的url参数
)
3.配置完毕,可以运行服务了

sudo /etc/init.d/lighttpd start #启动lighttpd
cd /home/ruby/mysite #切到项目路径下
#以线程方式运行fcgi服务,其中host和port参数要和上面lighttpd.conf中定义的一致
./manage.py runfcgi method=threaded host=127.0.0.1 port=3033

Ok,打开浏览器,输入http://127.0.0.1,就可以看到你的index页面了

PS:django把http://127.0.0.1/admin和http://127.0.0.1/admin[color=red]/[/color]解析为不同的路径,/admin/可以正常跳转,而/admin则是跳到/mysite.fcgi/admin/,当然是404了。通常在settings.py里加入FORCE_SCRIPT_NAME = '' 即可,可强行在url后加/
 类似资料: