django 및 fastcgi를 사용한 Lighttpd mod_rewrite vs. Apache mod_rewrite
-
12-09-2019 - |
문제
나는 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가 나에게 줄 수있는 것보다 더 동시 연결을 지원하는 웹 서버로 이동하도록하는 몇 가지 문제를 해결했습니다.
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"에서 sslmiddleware를 사용합니다. http://www.djangosnippets.org/snippets/240/ . 이 소프트웨어는 request.get_full_path에 의존하며, 이는 Apache의 경우와 다른 값을 반환합니다. request.path에 대해서도 동일합니다.
누구 든지이 문제에서 벗어날 수있는 방법을 제안 할 수 있습니까? 이상적으로는 Lighttpd mod_rewrite가 Apache 아래에서 mod_rewrite와 동일한 동작을 갖기를 원합니다. 불가능하다면 사용중인 SSLMIDDLEWARE 패키지와 호환되는 LightTPD FastCGI Django 설정을 원합니다. 또는 LightTPD의 mod_rewrite가 URL을 다시 작성하는 방식과 호환되도록 sslmiddleware 패키지를 변경할 수 있습니다.
이 대답은 환상적인 30 번째 생일 선물을 만들 것입니다!
해결책
force_script_name을 ""로 정의하려고 했습니까? settings.py FastCGI 서버를 다시 시작 하시겠습니까?
FORCE_SCRIPT_NAME=""
다른 팁
보다 http://redmine.lighttpd.net/issues/show/729 오히려 Lighttpd에서 고치려면.
요컨대 1.4.23으로 업그레이드하고 FCGI 구성에 "Fix-Root-ScriptName"=> "활성화"를 추가하십시오.