У меня есть экземпляр ERDDAP, работающий на сервере Tomcat за обратным прокси-сервером NGINX.
Среда полностью на Kubernetes, RP — это входной контроллер NGINX, который перенаправляет запрос на порт 443 экземпляру службы на порту 8080, связанному с контейнером, в котором работает Tomcat (и экземпляр ERDDAP).
Я нашел этот учебник (https://www.n0r1sk.com/post/nginx-reverse-proxy-with-ssl-offloading-and-apache-tomcat-backends/), в котором показано, как настроить server.xml для Tomcat за обратным прокси-сервером, поэтому HTTP-коннектор для моего сервера Tomcat:
<Connector server="Apache" secure="true" port="8080" protocol="HTTP/1.1" connectionTimeout="20000"
proxyPort="443"
relaxedPathChars='[]|'
relaxedQueryChars='[]:|{}^\`"<>' />
С этой конфигурацией, когда я запрашиваю URL-адрес https://erddap.ve.ismar.cnr.it/erddap:
ПОЛУЧИТЬ /erddap/ HTTP/1.1
Хост: erddap.ve.ismar.cnr.it
Идентификатор X-запроса: 484e514b4038614090bf34061e9287f3
X-Реал-IP: 10.104.235.192
X-переадресовано-для: 10.104.235.192
X-Forwarded-Host: erddap.ve.ismar.cnr.it
X-переадресованный порт: 443
X-Forwarded-Proto: https
X-схема: https
...
Я получаю следующий ответ:
HTTP/1.1 302
Строгая транспортная безопасность: max-age=0
Параметры X-Frame: SAMEORIGIN
X-Content-Type-Options: nosniff
X-XSS-защита: 1; режим = блок
различаться: происхождение
Access-Control-Allow-Credentials: правда
Access-Control-Expose-Headers: Access-Control-Allow-Origin,Access-Control-Allow-
Реквизиты для входа
Местонахождение: https://erddap.ve.ismar.cnr.it/erddap/index.html
Длина содержимого: 0
Дата: Чт, 24 февраля 2022 г., 17:55:41 по Гринвичу
Сервер: Апач
и все отлично работает с переадресацией прокси-сервера и ответом бэкэнда Tomcat.
Но если я добавлю в конфигурацию Tomcat Connector параметр схема = "https", как это было предложено в упомянутом выше руководстве:
<Connector server="Apache" secure="true" port="8080" protocol="HTTP/1.1" connectionTimeout="20000"
proxyPort="443"
scheme="https"
relaxedPathChars='[]|'
relaxedQueryChars='[]:|{}^\`"<>' />
тот же запрос не выполняется, и я получаю следующий ответ от Tomcat:
HTTP/1.1 302
Строгая транспортная безопасность: max-age=0
Параметры X-Frame: SAMEORIGIN
X-Content-Type-Options: nosniff
X-XSS-защита: 1; режим = блок
различаться: происхождение
Access-Control-Allow-Credentials: правда
Access-Control-Expose-Headers: Access-Control-Allow-Origin,Access-Control-Allow-
Реквизиты для входа
Местонахождение: (не указано)/erddap/index.html
Длина содержимого: 0
Дата: Чт, 24 февраля 2022 г., 18:02:44 по Гринвичу
Сервер: Апач
Вы можете заметить, что заголовок «Местоположение:» совершенно неверен с префиксом «(не указано)» и заставляет клиента сделать последующий запрос URL-адреса. https://erddap.ve.ismar.cnr.it/erddap/(not%20specified)/erddap/index.html (и, конечно, запрос не выполняется).
Может ли кто-нибудь из вас помочь мне определить, где может быть проблема в моей конфигурации Tomcat?
Почему поведение настолько отличается, просто добавив параметр схемы = "https" в server.xml?
Спасибо заранее,
Пьерпаоло