Когда nginx настроен как обратный прокси-сервер, может ли он переписать заголовок узла на нисходящий сервер, например, в Apache ProxyPreserveHost?


11

Кажется, я не могу найти эквивалент опции Apache ProxyPreserveHost http://httpd.apache.org/docs/2.0/mod/mod_proxy.html#proxypreservehost в nginx. Это необходимо для обращения прокси к виртуальным хостам.

Он заменяет имя хоста, которое браузер предоставляет, именем хоста нижестоящего сервера.

Это существует?

Ответы:


11

Я думаю, что нашел решение проблемы. Отправка хоста нижестоящего сервера является поведением по умолчанию в nginx, и я переопределил его с помощью директивы:

proxy_set_header Host $host;

Который отправляет хост, запрошенный браузером, на нисходящий сервер Точно противоположное тому, что я хотел.

Таким образом, хотя nginx не имеет эквивалента Apache ProxyPreserveHost, такое же поведение может быть достигнуто с помощью proxy_set_headerдирективы, и решение nginx является более общим.


Должно быть proxy_set_header Host $http_host;.
Роб

@Rob, $http_hostне существует в соответствии с документами Nginx: nginx.org/en/docs/varindex.html
Даниэль Серодио,

1
@DanielSerodio На самом деле, да, он существует, по крайней мере, для 99,99% соединений. Смотрите документацию . Это также очень тонко отличается от $host.
Майкл Хэмптон

@MichaelHampton Я исправлюсь, спасибо за ссылку
Даниэль Серодио

1

Рабочий пример:

  set $s3_bucket 'SOMEBUCKET.s3.amazonaws.com';

  location / {
        send_timeout 5m;
        proxy_read_timeout 240;
        proxy_send_timeout 240;
        proxy_connect_timeout 240;
        proxy_http_version 1.1;
        proxy_set_header Host $s3_bucket;
        proxy_set_header Authorization '';
        proxy_hide_header x-amz-id-2;
        proxy_hide_header x-amz-request-id;
        proxy_ignore_headers "Set-Cookie";
        proxy_buffering off;
        proxy_intercept_errors on;
        proxy_redirect off;
        resolver 8.8.8.8;
        proxy_pass http://$s3_bucket;
        }

Это использует nginx.
cod3fr3ak
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.