3

我正在从 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 岁生日礼物!

4

2 回答 2

3

您是否尝试在settings.py中将 FORCE_SCRIPT_NAME 定义为 ""并重新启动 fastcgi 服务器?

FORCE_SCRIPT_NAME=""
于 2009-07-10T03:26:26.997 回答
1

如果您想在 lighttpd 中修复它,请参阅http://redmine.lighttpd.net/issues/show/729 。

简而言之,升级到 1.4.23 并将 "fix-root-scriptname" => "enable" 添加到 fcgi 配置。

于 2009-07-16T19:27:51.707 回答