Коли 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 Я виправлений, дякую за посилання
Daniel Serodio

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.