我想在请求中使用cookie的值来确定要使用的上游服务器。我已经尝试过此配置,如果cookie的值正确,它可以工作,但是如果该值不匹配,则无法按我期望的方式工作
events {}
http {
log_format custom '"cookies=$http_cookie;cookiename=$cookie_SESID;host=$host;scheme=$scheme;$http_host"';
access_log /var/log/nginx/access.log custom;
error_log /var/log/nginx/error.log;
resolver 8.8.4.4 valid=10s;
server {
listen 80;
listen 443;
server_name _;
location ~* ^/$ {
if ($cookie_SESID = "Value") {
#proxy_pass to one of the instances (test or real)
#proxy_set_header HOST $host;
proxy_pass http://www.google.com;
}
#proxy_pass $scheme://$http_host;
proxy_pass http://amazon.com;
}
}
}
如果cookie的值为“ Value”,我希望它转到http://www.google.com,但是如果cookie的值为其他值,我希望它转到http://amazon.com,但是相反,它给了我301状态。我知道没有else块的概念,那么我该怎么做呢?另外,我知道通常也不使用if子句,但这不是我的新手,所以我就知道了。任何帮助将不胜感激。
更新:我也使用NGINX映射尝试了相同的逻辑,但仍然无法正常工作。
events {}
http {
log_format custom '"cookies=$http_cookie;cookiename=$cookie_SESID;host=$host;scheme=$scheme;$http_host"';
access_log /var/log/nginx/access.log custom;
error_log /var/log/nginx/error.log;
resolver 8.8.4.4 valid=10s;
map $cookie_SESID $backend{
default http://www.amazon.com;
Value http://www.google.com;
}
server {
listen 80;
listen 443;
server_name _;
location ~* ^/$ {
#proxy_pass $scheme://$http_host;
proxy_pass $backend;
}
}
}
另一个更新:
如果我将http://slashdot.org用作默认URL,则map指令似乎可以工作,它会给我301。如果我使用https://slashdot.org,则它可以正常工作。因此,如果位置发生变化,我如何跟随它到达下面 Location:标头中指定的新位置?
HTTP/1.1 301 Moved Permanently
< Server: nginx/1.14.0 (Ubuntu)
< Date: Tue, 09 Jul 2019 13:37:59 GMT
< Content-Type: text/html
< Content-Length: 194
< Connection: keep-alive
< Location: https://slashdot.org/