nginx указывает сервер для конкретного запроса

Допустим, у меня есть ip_hash; включен для балансировки нагрузки между 4 разными серверами. Таким образом, IP-адрес клиента используется в качестве ключа хеширования, чтобы определить, на какой сервер направляются его запросы.

Однако для загрузки файлов лучше хранить все файлы на одном сервере. Итак, я хочу все /upload запросы направляются на сервер 1 для любого клиента. Это означает, что все запросы подчиняются IP-хэшу, кроме POST /upload который должен быть отправлен на сервер 1.

Есть ли способ создать это исключение в NGINX? Спасибо!

1 ответ

Определить два upstream контейнеры, один с полной балансировкой нагрузки, а другой с конкретными требованиями к обслуживанию POST:

upstream balancing { ... }
upstream uploading { ... }

Кроме того, в рамках http контейнер, определить map метода запроса:

map $request_method $upstream {
    default balancing;
    POST    uploading;
}

Наконец, в рамках server контейнер, определить конкретный proxy_pass для /upload URI:

location / {
    proxy_pass http://balancing;
}
location /upload {
    proxy_pass http://$upstream;
}

Исходная спецификация оценивается по значению REQUEST_METHOD,

Другие вопросы по тегам