Вопрос или проблема
У меня есть сервер Lighttpd, работающий по HTTPS, и я хочу, чтобы одна подсистема на сервере действовала как обратный прокси для отдельного сервера, который работает по HTTP. Я пытался следовать руководствам по прокси и переписыванию URL, но что-то, связанное с настройкой SSL, мешает.
$SERVER["socket"] == ":81" {
url.rewrite-once = ( "^/directory/(.*)$" => "/index.html" )
proxy.server = ( "" => ( "" => ( "host" => "192.0.0.1", "port" => 123 )))
}
$HTTP["scheme"] == "http" {
$HTTP["host"] =~ ".*" {
url.redirect = (".*" => "https://%0$0")
}
}
$SERVER["socket"] == ":443" {
ssl.engine = "enable"
ssl.ca-file = "/etc/lighttpd/fullchain.pem"
ssl.pemfile = "/etc/lighttpd/server.pem"
$HTTP["url"] =~ "^/directory/" {
proxy.server = ( "" => ( "" => ( "host" => "127.0.0.1", "port" => 81)))
}
}
Я планировал, что переход на /directory/ перенаправит вас на 192.0.0.1:123/index.html. Я следовал этому руководству, которое упоминало о первом перенаправлении на порт 81, а затем о перенаправлении порта 81 на второй сервер.
Это не кажется работающим и просто застревает в цикле перенаправления, всегда возвращая 301 на https сайт.
Если я не делаю перенаправление на :81, я могу заставить нижний proxy.server перенаправлять в нужное место, но он сохраняет окончание /directory/, что не направляет туда, куда мне нужно.
Спасибо.
lighttpd 1.4.46 и более поздние версии имеют функцию в mod_proxy, которая позволяет перенастраивать префиксы URL-пути. Смотрите директиву ‘proxy.header’ и подопцию “map-urlpath”.
https://redmine.lighttpd.net/projects/lighttpd/wiki/Docs_ModProxy
Эта функция избегает конфигурации двойного прокси, которую вы пытаетесь использовать.
lighttpd 1.4.46 был выпущен чуть более года назад, а последняя версия lighttpd – 1.4.51.
Ответ или решение
Настройка Lighttpd как обратного прокси для соединений HTTPS
Для конфигурации вашего сервера Lighttpd, который работает на HTTPS, для учетной записи подкаталога, вы должны выполнить несколько шагов. Мы рассмотрим, как настроить обратный прокси, который будет перенаправлять запросы из подкаталога на другой сервер, работающий по HTTP. Ваша проблема с бесконечным перенаправлением и конфигурацией SSL может быть решена с помощью правильной настройки.
1. Убедитесь, что у вас последняя версия Lighttpd
Как упомянуто в вашем запросе, начиная с версии 1.4.46, Lighttpd включает функции модуля mod_proxy
, которые позволяют переопределять префиксы URL. Проверьте вашу версию Lighttpd и обновите, если это необходимо, поскольку последние обновления содержат важные исправления и новые функции.
2. Конфигурация lighttpd.conf
Используйте следующий пример конфигурации для достижения вашей цели. Обратите внимание на решение проблемы с бесконечными перенаправлениями и корректную настройку проксирования:
$SERVER["socket"] == ":443" {
ssl.engine = "enable"
ssl.ca-file = "/etc/lighttpd/fullchain.pem"
ssl.pemfile = "/etc/lighttpd/server.pem"
# Обработчик для подкаталога /directory/
$HTTP["url"] =~ "^/directory/(.*)" {
proxy.server = ( "" => ( "" => (
"host" => "192.0.0.1",
"port" => 123,
"map-urlpath" => (
"/" => "/$1"
)
)))
}
}
$HTTP["scheme"] == "http" {
$HTTP["host"] =~ ".*" {
url.redirect = (".*" => "https://%0$0")
}
}
3. Объяснение конфигурации
-
SSL настройки: Убедитесь, что SSL правильно настроен для обслуживания HTTPS-запросов. Параметры
ssl.ca-file
иssl.pemfile
указывают на используемые сертификаты. -
Прокси для подкаталога: Мы используем регулярное выражение для определения всех запросов к
/directory/
. Настройкаproxy.server
перенаправляет запросы на IP-адрес удаленного сервера. Здесь параметрmap-urlpath
позволяет обрезать/directory/
из запроса, перенаправляя его к нужному ресурсу на целевом сервере. -
HTTP редирект: Если входящий запрос осуществляется по протоколу HTTP, он будет автоматически перенаправляться на HTTPS, предотвращая смешанное использование контента.
4. Проверка конфигурации
После внесения изменений в конфигурационный файл Lighttpd, убедитесь, что вы его протестировали:
lighttpd -t -f /etc/lighttpd/lighttpd.conf
Если тест пройдет успешно, перезапустите сервис:
systemctl restart lighttpd
5. Дополнительные советы
- Логи: Включите журналирование, чтобы видеть, какие запросы обрабатываются и где могут возникнуть ошибки.
- Обработка ошибок: Добавьте обработчики ошибок для улучшения пользовательского опыта; например, при недоступности целевого сервера.
Заключение
Используя поддержку map-urlpath
, вы можете упростить обратное проксирование в Lighttpd без усложнения конфигурации. Убедитесь, что все подкаталоги и настройки прокси правильно настроены, чтобы избежать циклических редиректов и правильно обрабатывать запросы.