lighttpd mod_rewrite против apache mod_rewrite с помощью Django и FastCGI - PullRequest
3 голосов
/ 10 июля 2009

Я нахожусь в процессе миграции с установки 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.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. В частности, я использую sslmiddleware от "Stephen Zabel - sjzabel@gmail.com" от http://www.djangosnippets.org/snippets/240/. Это программное обеспечение опирается на request.get_full_path, который возвращает другое значение в lighttpd, чем в Apache. То же самое для request.path.

Может кто-нибудь предложить выход из этой проблемы? В идеале я бы хотел, чтобы lighttpd mod_rewrite имел то же поведение, что и mod_rewrite в Apache. Если это невозможно, я бы хотел, чтобы установка Lighttpd FastCGI Django была совместима с используемым пакетом sslmiddleware. В качестве альтернативы я мог бы изменить пакет sslmiddleware, чтобы он был совместим со способом, которым mod_rewrite из lighttpd переписывает URL-адреса.

Этот ответ сделает фантастический подарок к 30-летию!

Ответы [ 2 ]

3 голосов
/ 10 июля 2009

Вы пытались определить FORCE_SCRIPT_NAME как "" в settings.py и перезапустить сервер fastcgi?

FORCE_SCRIPT_NAME=""
1 голос
/ 16 июля 2009

См. http://redmine.lighttpd.net/issues/show/729, если вы хотите исправить это в lighttpd.

Короче говоря, обновитесь до 1.4.23 и добавьте "fix-root-scriptname" => "enable" в конфигурацию fcgi.

...