Lighttpd устанавливает X-Forwarded-Host на основе входящего запроса

В настоящее время я использую Lighttpd в качестве прокси для добавления HTTPS-шифрования в приложение, которое не поддерживает HTTPS.

Для этого я использую следующую конфигурацию:

# Listen to port 443
$SERVER["socket"] == ":443" {
  ssl.engine = "enable"
  include "ssl-params.conf"

  proxy.server = ( "" => ( ( "host" => "127.0.0.1", "port" => 80 ) ) )
  setenv.add-request-header  = (
     "X-Forwarded-Proto" => "https",
     "X-Forwarded-Host" => "hardcoded.domain.com",
     "X-Forwarded-Port" => "443"
  )
  # Set Error/Log
  server.errorlog = "/var/log/lighttpd/error.log"
}

Эта конфигурация работает за исключением одного момента. Мне нужно жестко запрограммировать значение X-Forwarded-Host. До недавнего времени это не было проблемой, но теперь у меня есть несколько доменов, указывающих на один и тот же прокси-сервер, и мне нужно переслать правильное доменное имя.

Есть ли способ извлечь на хост из входящего HTTPS-соединения, чтобы передать правильное значение X-Forwarded-Host?


person Bluuu    schedule 20.09.2016    source источник


Ответы (1)


lighttpd предоставляет хост в заголовке запроса X-Host для бэкэнда вместо использования X-Forwarded-Host.

К вашему сведению: согласно https://redmine.lighttpd.net/issues/418, lighttpd планирует (в будущем) для реализации перенаправленного расширения HTTP (https://tools.ietf.org/html/rfc7239 < / а>)

Кстати, lighttpd также уже добавляет X-Forwarded-Proto в прокси-запросы.

person gstrauss    schedule 21.09.2016
comment
Интересная находка! Приложение, которое я проксирую, использует только X-Forwarded-Host, и я не могу его изменить. Я думаю, что нет способа настроить такое поведение, не так ли? Могу ли я прочитать заголовки других запросов перед использованием setenv? - person Bluuu; 22.09.2016
comment
Я попробую удалить X-Forwarded-Proto, спасибо за подсказку. - person Bluuu; 22.09.2016
comment
Вы можете использовать mod_magnet в lighttpd, чтобы делать довольно много произвольных манипуляций. Код Lua будет состоять из двух строк типа (непроверено) lighty.request["X-Forwarded-Host"] = lighty.request["Host"] return 0 (с возвращением 0 во второй строке) - person gstrauss; 23.09.2016