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
,