Я хочу использовать значение 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 равно «Значение«Я хочу, чтобы оно перешло на 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;
}
}
}
ДругойОбновление:
Директива map, кажется, работает, если я использую http://slashdot.org в качестве URL-адреса по умолчанию, это даст мне 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/