我已决定将项目服务器后端从 Apache+WSGI 更改为 lighttpd+FCGI。现在,一切正常,除了 DOCUMENT_URI 的一个烦人问题,它接收我的 django 服务器(以 ./manage.py runfcgi … 启动)。它始终包含 /index.fcgi 前缀!
让我们看一下我的 lighttpd 配置:
fastcgi.server = (
".fcgi" => (
"localhost" => (
"host" => "127.0.0.1",
"port" => 3033,
"check-local" => "disable",
)
),
)
url.rewrite-once = (
"^(/.*)$" => "/index.fcgi$1",
)
根据重写规则,http://www.mysite.com/procuts/请求将被 mod_rewrite 更改为 ....mysite.com/index.fcgi/procucts/,因此 DOCUMENT_URI 将为:index.fcgi/procucts/。
但是,当我在 Apache 上使用 WSGI 时,我的 DOCUMENT_URI 不包含处理程序脚本名称。
我的 Apache WSGI 设置:
WSGIScriptAlias / /path/to/my/site/index.wsgi
请给我一个建议!
答案1
看一下http://docs.djangoproject.com/en/dev/howto/deployment/fastcgi/
我按照这个方法使我的 Lighttpd + FastCGI 设置工作起来(我在下面附上了我的配置的净化版本以供参考)。您还需要在 settings.py 中设置 FORCE_SCRIPT_NAME=""。
server.modules += ( "mod_fastcgi" )
server.modules += ( "mod_alias" )
$HTTP["host"] =~ "(www\.)?domain\.com" {
fastcgi.server = (
"/django.fcgi" => (
"main" => (
"host" => "127.0.0.1",
"port" => 3000,
"check-local" => "disable",
)
),
)
alias.url = (
"/admin-media" => "/path/to/django/contrib/admin/media/",
)
url.rewrite-once = (
"^(/admin-media.*)$" => "$1",
"^(/.*)$" => "/django.fcgi$1",
)
}