NGINX-从cookie确定上游服务器

时间:2019-07-09 00:35:06

标签: nginx nginx-config

我想在请求中使用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/

0 个答案:

没有答案