Назад | Перейти на главную страницу

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

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

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

Он существует?

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

proxy_set_header Host $host;

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

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

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

  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;
        }