我正在从Apache中的Django FastCgi设置迁移到lighttpd中的设置。
在Apache上,我使用的是Django文档中描述的fcgi配置。核心部分是将我的所有非静态URL重写为/mysite.fcgi/$1:
RewriteRule ^/(.*)$ /mysite.fcgi/$1 [QSA,L]
然后转发/mysite.fcgi对FastCGI的所有请求:
<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/
。生活很美好,我很开心。但是,我遇到了一些问题,迫使我转移到一个Web服务器,它支持比Apache更多的同时连接。
快进到lighttpd。一切都配置得很好。我用mod_rewrite重写我的URL:
url.rewrite-once =( “^(/ media /。)$”=&gt; “$ 1”, “^ / favicon.ico $”=&gt; “/med/img/favicon/favicon.ico” “^(/。)$”=&gt; “/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具有相同的行为。如果不可能,我想要一个lighttpd FastCGI Django设置,它将与我正在使用的sslmiddleware软件包兼容。或者,我可以将sslmiddleware包更改为与lighttpd中的mod_rewrite重写URL的方式兼容。
这个答案将成为30岁生日!
答案 0 :(得分:3)
您是否尝试在settings.py中将FORCE_SCRIPT_NAME定义为“”并重新启动fastcgi服务器?
FORCE_SCRIPT_NAME=""
答案 1 :(得分:1)
如果您想在lighttpd中修复它,请参阅http://redmine.lighttpd.net/issues/show/729。
简而言之,升级到1.4.23并添加“fix-root-scriptname”=&gt; “启用”到fcgi配置。