我正在从在Apache上使用Django FastCgi设置迁移到在lighttpd上的设置。
在Apache上,我使用了Django文档中描述的fcgi配置。其中核心部分是将所有非静态URL重写为/mysite.fcgi/$1:
设置对于Django有效。例如,如果我访问
一般情况下,我的Django网站运行正常。但是,当我访问
尽管这通常不会引起问题,因为Django网站工作良好,但在使用SSL时会引发问题。具体来说,我使用了“Stephen Zabel - sjzabel@gmail.com”从http://www.djangosnippets.org/snippets/240/获取的sslmiddleware。该软件依赖于request.get_full_path,该函数在lighttpd下返回的值与在Apache下返回的值不同。request.path也是如此。
有人可以提出解决这个问题的方法吗?理想情况下,我希望lighttpd mod_rewrite具有与Apache mod_rewrite相同的行为。如果不可能,我希望一个lighttpd FastCGI Django设置可以与我正在使用的sslmiddleware包兼容。或者,我可以更改sslmiddleware包以与lighttpd重写URL的方式兼容。
这个答案将成为一个绝佳的30岁生日礼物!
在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服务器。
跳到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时会引发问题。具体来说,我使用了“Stephen Zabel - sjzabel@gmail.com”从http://www.djangosnippets.org/snippets/240/获取的sslmiddleware。该软件依赖于request.get_full_path,该函数在lighttpd下返回的值与在Apache下返回的值不同。request.path也是如此。
有人可以提出解决这个问题的方法吗?理想情况下,我希望lighttpd mod_rewrite具有与Apache mod_rewrite相同的行为。如果不可能,我希望一个lighttpd FastCGI Django设置可以与我正在使用的sslmiddleware包兼容。或者,我可以更改sslmiddleware包以与lighttpd重写URL的方式兼容。
这个答案将成为一个绝佳的30岁生日礼物!