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

Восходящий поток Nginx на основе remote_addr

Есть ли у вас идеи, есть ли более простое решение для передачи запросов в разные восходящие потоки на основе IP-адреса посетителя?

Единственное решение, которое я нашел на данный момент:

upstream live {
    ip_hash;
    server 10.0.0.1;
}

upstream test {
    ip_hash;
    server 10.0.0.2;
}

location / {
    if ($remote_addr = "10.0.0.101") {
        proxy_pass http://test;
    }
    proxy_pass http://live;
    // the rest of the bla bla
}

Это решает проблему, если у вас есть только «местоположение» и только один IP-адрес, который должен пройти «тестовый» восходящий поток. Я пробовал оператор if при включении файлов конфигурации (не работает). Еще пробовал ставить if при объявлении апстрима (тоже самое, не работает).

Поэтому, если кто-то делает что-то подобное, помощь будет оценена (я уверен, что я не единственный, у кого есть эта проблема). Мне нужно это решение, чтобы наши разработчики протестировали его в реальной среде ... и это потому, что используемое нами платежное решение позволяет нам отправлять запросы только из текущей инфраструктуры.

Спасибо.

Попробуй это:

    geo $upstream_addr {
           10.0.0.101/32 test;
           default live;
    }

...
            location / {
                    proxy_pass http://$upstream_addr;
                    ...
            }