Я настроил nginx в качестве обратного прокси-сервера, чтобы получить доступ к службе, работающей на другом хосте, и добавить шифрование ssl. Я использую следующую конфигурацию:
server {
listen 9000 ssl;
server_name my.domain.de;
ssl_certificate "/etc/pki/nginx/server.crt";
ssl_certificate_key "/etc/pki/nginx/private/server.key";
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location /service/ {
proxy_pass http://remote_host:8999/;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Port $server_port;
}
}
Когда я пытаюсь открыть URL https://my.domain.de:9000/service/
, ответом является перенаправление 302 с заголовком Location, установленным в https://remote_host:8999/ui
, но оно должно быть https://my.domain.de:9000/service/ui
.
Когда я деактивирую ssl, изменив строку listen 9000 ssl;
на listen 9000;
, она работает как положено.
Я уже пытался явно указать proxy_redirect http://remote_host:8999/ https://my.domain.de:9000/service/;
, что в любом случае должно быть поведением по умолчанию, afaik, но это не помогло.
Кстати: прямой доступ к https://my.domain.de:9000/service/ui
также работает нормально. Единственная проблема - nginx не правильно заменяет заголовок Location в ответе 302, полученном от удаленного хоста.
Не только раздражает, что перенаправление не работает, но мне также не нравится, что имя хоста прокси-сервера выставляется таким образом.