lighttpd mod_rewrite противapache mod_rewrite с помощью Django и FastCGI
-
12-09-2019 - |
Вопрос
Я нахожусь в процессе перехода с установки Django FastCGI в Apache на установку в lighttpd.
В Apache я использовал конфигурацию fcgi, описанную в документах Django.Основная часть заключается в переписывании всех моих нестатических 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/
.Жизнь была хороша, и я был счастлив.Однако я столкнулся с некоторыми проблемами, которые вынуждают меня перейти на веб-сервер, поддерживающий больше одновременных подключений, чем может предоставить мне Apache.
Перенесемся в lighttpd.Все настроено и хорошо.Я переписываю свои URL-адреса с помощью mod_rewrite:
url.переписать-один раз = ( "^(/media/.)$" => "$1", "^/favicon.ico$" => "/med/img/значок /favicon.ico", "^(/.)$" => "/mysite.fcgi $1", )
и иметь быструю обработку CGI /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.В частности, я использую sslmiddleware от "Stephen Zabel - sjzabel@gmail.com" из http://www.djangosnippets.org/snippets/240/ .Это программное обеспечение полагается на request.get_full_path , который возвращает другое значение в lighttpd, чем в Apache.То же самое для запроса.путь .
Кто-нибудь может предложить выход из этой проблемы?В идеале я бы хотел, чтобы lighttpd mod_rewrite вел себя так же, как mod_rewrite в Apache.Если это невозможно, мне бы хотелось установить lighttpd FastCGI Django, который был бы совместим с пакетом sslmiddleware, который я использую.В качестве альтернативы, я мог бы изменить пакет sslmiddleware, чтобы он был совместим с тем, как mod_rewrite из lighttpd перезаписывает URL-адреса.
Этот ответ стал бы фантастическим подарком на 30-летие!
Решение
Вы пытались определить FORCE_SCRIPT_NAME в "" в settings.py и перезапустить сервер fastcgi?
FORCE_SCRIPT_NAME=""
Другие советы
Видишь http://redmine .lighttpd.net/issues/show/729 если вы предпочитаете исправить это в lighttpd.
Короче говоря, обновитесь до 1.4.23 и добавьте "fix-root-scriptname" => "включить" в конфигурацию fcgi.