我正在从 Apache 中的 Django FastCgi 设置迁移到 lighttpd 中的设置。
在 Apache 上,我使用的是 Django 文档中描述的 fcgi 配置。核心部分是将我所有的非静态 URL 重写为 /mysite.fcgi/$1:
RewriteRule ^/(.*)$ /mysite.fcgi/$1 [QSA,L]
然后为 FastCGI 转发 /mysite.fcgi 的所有请求:
<IfModule mod_fastcgi.c>
FastCGIExternalServer /opt/www/mysite.fcgi -host 127.0.0.1:8000
</IfModule>
该设置适用于 Django。例如,如果我去http://www.mydomain.com/help/
并在模板中打印{{ request.get_full_path }}
,结果是/help/
. 生活很好,我很开心。但是,我遇到了一些问题,这些问题迫使我转移到支持比 Apache 给我更多的同时连接的 Web 服务器。
快进到 lighttpd。一切都已配置好。我正在用 mod_rewrite 重写我的 URL:
url.rewrite-once = ( "^(/media/.)$ " => "$1", "^/favicon.ico$" => "/med/img/favicon/favicon.ico", "^(/ . )$" => "/mysite.fcgi$1", )
并让 FastCGI 处理 /mysite.fcgi:
fastcgi.server = (
"/mysite.fcgi" => (
"main" => (
"host" => "127.0.0.1",
"port" => 8000,
"check-local" => "disable",
)
),
)
一切正常,我的 Django 网站运行良好。但是当我去模板中http://www.mydomain.com/help/
打印{{ request.get_full_path }}
时,结果是/mysite.fcgi/help/
. 这会导致一些问题。
虽然这通常不会导致问题,因为 Django 站点运行良好,但在我使用 SSL 时确实会导致问题。具体来说,我使用来自http://www.djangosnippets.org/snippets/240/的“Stephen Zabel - sjzabel@gmail.com”的 sslmiddleware 。该软件依赖于 request.get_full_path,它在 lighttpd 下返回的值与在 Apache 下不同。request.path 相同。
任何人都可以提出解决这个问题的方法吗?理想情况下,我希望 lighttpd mod_rewrite 在 Apache 下具有与 mod_rewrite 相同的行为。如果不可能,我想要一个与我正在使用的 sslmiddleware 包兼容的 lighttpd FastCGI Django 设置。或者,我可以将 sslmiddleware 包更改为与 lighttpd 中的 mod_rewrite 重写 URL 的方式兼容。
这个答案将成为一份很棒的 30 岁生日礼物!