Назад | Перейти на главную страницу

X-Forwarded-Proto с несколькими прокси

Я не могу перенаправить HTTP на HTTPS с помощью Apache из-за наличия более одного прокси между клиентом и сервером.

HTTPS завершается на балансировщике нагрузки с выходом в Интернет, все другие устройства (включая сервер Apache, обслуживающий запросы) используют HTTP.

Я вижу, что все, на что смотрит Apache, - это X-Forwarded-Proto последнего прокси в цепочке, то есть HTTP.

Как я могу заставить его посмотреть настоящий заголовок X-Forwarded-Proto (удаленного клиента)?

Для перенаправлений, поступающих из HTTP-бэкэнда, единственная директива, о которой следует беспокоиться в обратном прокси-сервере:

ProxyPassReverse

Если перенаправление происходит из цепочки обратных прокси-серверов, независимо от того, что они отправляют, если у вас есть директива ProxyPassReverse для любого внутреннего имени, Apache изменит хост в Location и схему (http / s) в качестве клиента отправил его изначально.

Хорошо то, что ProxyPassReverse можно указывать сколько угодно раз.

Так, например, если ваш обратный прокси-сервер размещает общедоступный https://main.example.com и у вас есть множество бэкэндов, которые отправляют вам перенаправления, например:

Location: http://something.example.com/somesome
Location: http://otherthing.internal.example.com/heresomething/jkjljl.whatever
Location: http://deepdowninthechain.some.exampe.com/therethere/there/there

Все, что вам нужно сделать, это добавить:

ProxyPassReverse / http://something.example.com/
ProxyPassReverse / http://otherthing.internal.example.com/
ProxyPassReverse / http://deepdowninthechain.some.exampe.com/

И Apache HTTPD вернет все эти заголовки Location в соответствии с запросом исходного клиента: https://main.example.com/whatever...