Apache+Django+FastCGI

 Dec. 26, 2011, 5:33 p.m.   5 comments    Django Apache FastCGI

最近在课上做动态网页的作业,虽然要求用JSP完成,但是我实在是不想碰Java,于是跟老师商量了一下决定用Django来做。

程序还没写完,却已经开始琢磨着怎么部署Django,Django Book上建议使用Apache+mod_python的方式实现,但是我在编译mod_python时却总是会出错,Google了一通也没找出原因,索性弃之不用而改用FastCGI。

一点准备工作

配置Apache

为了让Apache能够使用FastCGI模块,需要编辑httpd.conf,添加一行

LoadModule fastcgi_module modules/mod_fastcgi.so

其次,为了使得目录中的.htaccess文件有效,需要将中的参数

AllowOverride None

改为

AllowOverride All

最后,需要修改参数

Options FollowSymLinks

在此之后添加+ExecCGI,成为

Options FollowSymLinks +ExecCGI

这是为了允许执行目录中的CGI脚本,之前尝试过很多次都无法执行CGI脚本,直到看到这篇文章才明白其中的原因。

部署Django Project

假设/srv/http为网站的根目录,而Django Project的目录为mysite,则将mysite目录直接放置在/srv/http目录中,编辑mysite.settings,将DEBUG置为False关掉DEBUG模式即可。

为mysite编写CGI脚本

/srv/http中新建CGI脚本mysite.fcgi

#!/usr/bin/python2
import sys, os

# Add a custom Python path.
sys.path.insert(0,'/srv/http')

# Switch to the directory of your project. (Optional.)
os.chdir('/srv/http')

# Set the DJANGO_SETTINGS_MODULE environment variable.
os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'

from django.core.servers.fastcgi import runfastcgi
runfastcgi(method='threaded', daemonize='false')

.htaccess文件的配置

在网站根目录内新建.htaccess文件,定义Rewrite规则,将所有的请求都交给mysite.fcgi脚本处理

AddHandler fastcgi-script .fcgi
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ mysite.fcgi/ [QSA,L]

更多关于使用FastCGI运行Django的资料,可以参考Django Project网站上的文档 How to use Django with FastCGI, SCGI, or AJP

UPDATE:更推荐使用uWSGI部署Django应用


aroma

aroma Dec. 27, 2011, 11:49 p.m. Reply

mark


www.chaojishop.com

www.chaojishop.com Jan. 8, 2012, 6:09 p.m. Reply

第一次来你这,支持下。


小杰

小杰 May 4, 2012, 12:13 a.m. Reply

我想知道 你配置完了这些然后你怎么使用呢

Chon

Chon May 4, 2012, 10:59 a.m. Reply

我现在用这种方式部署Django了
http://ichon.me/2012/04/16/django-based-on-nginx-uwsgi.html

小杰

小杰 May 4, 2012, 1:38 p.m. Reply

我这样子配置完以后 python mysite.fcgi是200 用浏览器看是500不知道为什么