nginx proxy_redirect не перезаписывает заголовок местоположения в ответе

#nginx #proxy

#nginx #прокси

Вопрос:

у меня простая проблема

  • настройка балансировщика нагрузки с использованием nginx для 6 вышестоящих серверов

я сделал это

вышестоящие hisservers {
ip_hash;
сервер A;
сервер B;
сервер C;
сервер D;
сервер E;
сервер F; }

сервер {
прослушивание 80;
имя_сервера test.server;
location / {
proxy_set_header X-Forwarded-Host $host:$server_port;
proxy_set_header X-Forwarded-Сервер $хост;
proxy_set_header X-Forwarded-Для $proxy_add_x_forwarded_for;
proxy_pass http://hisservers ;
} }

но проблема в том, что … приведенное выше решение не перезаписывает заголовок местоположения в ответе .. поэтому я всегда перенаправляю на любой из этих 6 восходящих потоков

затем я сделал это

proxy_redirect http://hisservers /;

тем не менее, это не работает, наконец, я сделал это

proxy_redirect http://A / /;
proxy_redirect прокси-сервер http://B / /;
proxy_redirect прокси-сервер http://C / /;
proxy_redirect прокси-сервер http://D / /;
proxy_redirect прокси-сервер http://E / /;
proxy_redirect прокси-сервер http://F/ /;

и это работает..

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

любые советы по этому поводу..

я думаю, что мое решение довольно хакерское

Ответ №1:

Каждый из ваших серверов возвращает разные имена хостов в своих заголовках ответов о местоположении, и поэтому ваши proxy_redirect операторы должны соответствовать этим именам хостов.

Вы можете сопоставить каждое имя хоста, используя отдельные proxy_redirect операторы, как вы продемонстрировали в конце своего вопроса.

В качестве альтернативы, proxy_redirect позволяет использовать регулярные выражения. Подробности см. В Этом документе.

Например:

 proxy_redirect ~*http://[^/] (/.*)$ $1;
 

Приведенное выше утверждение должно заменить шесть утверждений в конце вашего вопроса. [^/] Выражение соответствует любому имени хоста, и (/.*)$ выражение фиксирует URI, который будет использоваться при замене.

Комментарии:

1. отлично! спасибо за отзыв .. я думаю, что nginx автоматически обработает заголовок перезаписи