Я нахожусь в процессе миграции с установки 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-летию!