【问题标题】:nginx specify server for a particular requestnginx 为特定请求指定服务器
【发布时间】:2016-04-01 12:31:06
【问题描述】:
假设我打开了ip_hash; 以在 4 个不同的服务器之间进行负载平衡。因此,客户端的 IP 地址用作哈希键来确定他的请求被路由到哪个服务器。
但是,对于文件上传,最好将所有文件保存在单个服务器中。所以,我希望所有/upload 请求都被路由到服务器 1对于任何客户端。这意味着所有请求都遵循 IP 哈希,除了必须发送到服务器 1 的 POST /upload。
有没有办法在 NGINX 中创建这个异常?谢谢!
【问题讨论】:
标签:
nginx
upload
load-balancing
distributed
sticky-session
【解决方案1】:
定义两个 upstream 容器,一个具有完全负载平衡,另一个具有 POST 特定服务要求:
upstream balancing { ... }
upstream uploading { ... }
另外,在http容器中,定义一个map的请求方法:
map $request_method $upstream {
default balancing;
POST uploading;
}
最后,在server 容器中,为/upload URI 定义一个特定的proxy_pass:
location / {
proxy_pass http://balancing;
}
location /upload {
proxy_pass http://$upstream;
}
上游规范根据REQUEST_METHOD 的值进行评估。