nginx больше не переписывает местоположение перенаправления при включенном ssl - PullRequest
0 голосов
/ 22 апреля 2020

Я настроил 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, полученном от удаленного хоста.

Не только раздражает, что перенаправление не работает, но мне также не нравится, что имя хоста прокси-сервера выставляется таким образом.

...