У меня есть несколько серверов Tomcat за балансировщиком нагрузки NetScaler, который выполняет разгрузку SSL. я добавил следующую строку в server.xml для всех из них:
<Valve className="org.apache.catalina.valves.RemoteIpValve"
remoteIpHeader="x-forwarded-for" protocolHeader="x-forwarded-proto" />
это работает на всех серверах, кроме двух (идентичных). Я пытаюсь заставить его работать с этими двумя.
я понюхал трафик, и он содержит x-forwarded-proto
заголовок со значением https
, как этому следовало быть. возвращенный результат для request.getHeader("x-forwarded-proto")
является https
. тем не мение, request.getScheme()
возвращается http
и request.isSecure()
возвращается false
.
как я могу заставить работать remoteIpValve?
Спасибо.
Какой удаленный IP-адрес балансировщика нагрузки?
IP-адрес подключаемого устройства (в данном случае балансировщика нагрузки) должен быть в internalProxies
конфигурации, в противном случае преобразования в удаленный адрес, схему, порт и безопасность запроса не применяются.
По умолчанию разрешены localhost и большинство диапазонов RFC1918 (кроме 172.16 / 12). Если IP-адрес вашего прокси-сервера при подключении к серверу tomcat не находится в одном из этих диапазонов, вам необходимо настроить internalProxies
настройка, чтобы разрешить балансировщик нагрузки.