Существует ли переменная nginx для неразрешенного адреса вышестоящего сервера?

Существует ли переменная nginx для неразрешенного адреса вышестоящего сервера?

При использовании nginx в качестве обратного прокси для группы серверов в блоке upstream, есть ли переменная, которая соответствует неразрешенному имени сервера? Например, рассмотрим следующую конфигурацию:

http {
    upstream foo {
        server foo1.example.com:8080;
        server foo1.example.com:8081;
        server foo2.example.com:8080;
        server foo2.example.com:8081;
    }
    server {
        server_name foo.example.com;
        location / {
            proxy_pass http://foo;
        }
    }
}

Пусть foo.example.com, foo1.example.comи foo2.example.comбудут определенными именами, которые разрешаются в 192.0.2.1, 192.0.2.2 и 192.0.2.3 соответственно.

Предположим, что запрос приходит на foo.example.comи nginx решает выбрать foo2.example.comпорт 8080 в качестве сервера upstream, и запрос выполняется успешно. Тогда, насколько мне известно, это будут значения некоторых соответствующих переменных:

  • $host = foo.example.com
  • $proxy_host = foo
  • $upstream_addr = 192.0.2.3:8080(*)

Однако ни один из них не соответствует значению, указанному в конфигурации для вышестоящего сервера. Поэтому, более конкретно, мой вопрос: какая переменная, если таковая имеется, будет иметь значение foo2.example.com:8080в этом случае?

Чтобы избежать проблемы XY, я пытаюсь сделать следующее:

  1. регистрировать сервер верхнего уровня по имени хоста, а не по IP-адресу, поскольку разрешенный IP-адрес может быть временным или не поддерживать обратный просмотр 1:1
  2. на mapвышестоящий сервер для другой части информации, которая более полезна, также для целей регистрации
  3. для настройки проверки имени хоста (например, через proxy_ssl_name) для исходящего SSL, когда серверы не используют один и тот же сертификат (это может стать поводом для отдельного вопроса, но это не единственный вариант использования)

(*) = Переменная, $upstream_addrпо-видимому, недоступна на всех этапах запроса, например, добавление proxy_set_header Upstream-Addr $upstream_addr;в блок местоположения, по-видимому, не имеет никакого эффекта, что означает, что переменная пуста

решение1

Прокси могут быть сложными. Nginx — proxy_set_headerэто то, что вам нужно.Документация по Nginx

proxy_set_header    Host            $host;

Смотри сюдадля примераболее подробной конфигурации для прокси

Связанный контент