lighttpd mod_rewrite vs Apache mod_rewrite com Django e FastCGI
-
12-09-2019 - |
Pergunta
Eu estou no processo de migração de uma configuração Django FastCgi em Apache para um em lighttpd.
No Apache, eu estava usando a configuração fcgi descrito na documentação do Django. A parte principal sendo reescrever todos os meus URLs não-estáticos para ser /mysite.fcgi/$1:
RewriteRule ^/(.*)$ /mysite.fcgi/$1 [QSA,L]
e, em seguida, encaminhar todas as solicitações de /mysite.fcgi para FastCGI:
<IfModule mod_fastcgi.c>
FastCGIExternalServer /opt/www/mysite.fcgi -host 127.0.0.1:8000
</IfModule>
A configuração trabalhou para Django. Se, por exemplo, fui para http://www.mydomain.com/help/
e eu impressa {{ request.get_full_path }}
no modelo, o resultado foi /help/
. A vida era boa e eu estava feliz. No entanto, eu corri para algumas questões que estão me forçando a se mover para um servidor web que suporta conexões mais simultâneas que o Apache pode me dar.
Fast forward para lighttpd. Tudo é configurado e bem. Estou reescrevendo meus URLs com mod_rewrite:
url.rewrite-once = ( "^ (/ media /. ) $" => "$ 1", "^ / Favicon.ico $" => "/med/img/favicon/favicon.ico", "^ (/. ) $" => "/mysite.fcgi$1", )
e ter FastCGI /mysite.fcgi manipulação:
fastcgi.server = (
"/mysite.fcgi" => (
"main" => (
"host" => "127.0.0.1",
"port" => 8000,
"check-local" => "disable",
)
),
)
As coisas funcionam, em geral, e meu Django site funciona bem. Mas quando eu ir para http://www.mydomain.com/help/
e imprimir {{ request.get_full_path }}
no modelo, o resultado é /mysite.fcgi/help/
. Isso faz com que alguns problemas.
Enquanto isso não causa problemas em geral como o local Django funciona bem, ele faz causar problemas quando eu usar SSL. Especificamente, eu uso sslmiddleware de "Stephen Zabel - sjzabel@gmail.com" do http: // www. djangosnippets.org/snippets/240/ . Este software conta com request.get_full_path, que retorna um valor diferente sob lighttpd do que ele fez no Apache. Mesmo para request.path.
Alguém pode sugerir uma maneira de sair deste problema? Idealmente, eu gostaria mod_rewrite lighttpd para ter o mesmo comportamento como mod_rewrite no Apache. Se não for possível, eu gostaria de um lighttpd configuração FastCGI Django que seria compatível com o pacote sslmiddleware que estou usando. Como alternativa, eu poderia mudar o pacote sslmiddleware para ser compatível com a maneira que mod_rewrite de lighttpd reescreve URLs.
Esta resposta faria uma fantástica 30º aniversário presente!
Solução
Você tentou definir FORCE_SCRIPT_NAME para "" em settings.py e reiniciar o servidor fastcgi?
FORCE_SCRIPT_NAME=""
Outras dicas
http://redmine.lighttpd.net/issues/show/729 se você preferir corrigi-lo em lighttpd.
Em suma, atualizar para 1.4.23 e adicionar "fix-root-scriptname" => "Enable" para a configuração fcgi.