使用 map 指令检查 nginx 的 HTTP cookie 值

使用 map 指令检查 nginx 的 HTTP cookie 值

我需要根据客户端的 IP 和 WPML Wordpress 插件在 cookie 中设置的值执行重定向。

我更喜欢使用 map 指令来实现此目的。摘录自nginx.conf

 geoip_country /usr/local/share/GeoIP/maxmind_countries.dat;
 geoip_city   /usr/local/share/GeoIP/maxmind_cities.dat;


map $host:$geoip_country_code:$cookie_wp-wpml_current_language  $redirect {
   "example.com:UA:''" "1";
   "example.com:UA:'uk'" "0";
   "example.com:UA:'ru'" "0";
}

然后在域名配置文件我只是检查使用$重定向在条件语句中

if ($redirect) {
    rewrite ^https://example.com/uk break;
}

因此,我的问题是:如何以正确的方式检查 cookie 的值,以及如何检查 cookie 是否未设置(具有空值),特别是使用地图指令nginx

答案1

下面列出的配置符合我的需求

map $host $redirect_host {
    example.com 1;
    default 0;
}

map $geoip_country_code $redirect_country {
    UA 1;
    default 0;
}

map $cookie_wp-wpml_current_language $redirect_cookie {
    uk 0;
    ru 0;
    default 1;
}

map $redirect_host:$redirect_country:$redirect_cookie $make_redirect {
    1:1:1 1;
}

然后使用$make_redirect域配置中的变量

if ($make_redirect) {
    rewrite ^https://example.com/uk break;
}

答案2

我会将几个map条件拆分成不同的块:

map $host $redirect_host {
    example.com 1;
    default 0;
}

map $geoip_country $redirect_country {
    UA 1;
    default 0;
}

map $cookie_wp-wpml_current_language $redirect_cookie {
    uk 0;
    default 1;
}

然后检查以下情况:

if (${redirect_host}${redirect_country}${redirect_cookie} = 111) {
    return 301 https://www.example.com/uk/;
}

您需要检查每个变量的默认值和条件以满足您的目的,这只是概念的一个说明。

相关内容