Nginx如何配置根据cookie或header自定义字段进行跳转
一、根据cookie中的值来判断跳转
$http_cookie这个关键词是读取cookie的全部信息,那么我们是需要判断cookie中包含的某个字段的值,比如我设置openid=5,我该如何获取那么,我们可以通过$cookie_openid,其中openid是你设置的,这里需要加前缀cookie就可以获取了。
在location中设置,注意此跳转支持post传输。
location / {
#设置一个变量来接收跳转的地址
set $lodurl "http://xxx.xx.xx/xx"; #这里设置了默认地址
#注意if和(之间要又一个空格,否则无法执行,会出错
if ($cookie_openid = "5")
{
set $lodurl "http://www.www.com/xx";#需要跳转的地址
}
proxy_pass $lodurl;
}
二、其实header和cookie设置是一样,只是获取字段的值不一样而已
location / {
....
if ($http_foo = "bar") { //完全匹配
#if ($http_foo ~ "bar") { //正则匹配
proxy_pass http://default-new-nginx-80;
break;
}
proxy_pass http://default-old-nginx-80;
....
}
三、使用$arg_获取http的请求参数,根据配置中是否为完整或者正则匹配,匹配foo的值
location / {
....
if ($arg_foo ~ "^bar") { //正则匹配
#if ($arg_foo = "bar") { //完全匹配
proxy_pass http://default-new-nginx-80;
break;
}
proxy_pass http://default-old-nginx-80;
...
我的实战:
请求中cookie中工号,进行白名单
使用了nginx的map,参考:CSDNhttps://mp.csdn.net/mp_blog/creation/editor/121418974
http {
map $cookie_cookie中key1 $white_employee {
xxx11 1;
yyy22 1;
}
map $cookie_cookie中key2 $white_employee {
xxx11 1;
yyy22 1;
}
server {
listen 80;
server_name 域名;
location /yyyy/ {
alias /usr/local/nginx/html/;
}
location /xxxyyy/ {
if ($white_employee = "1" ) {
rewrite ^/xxxyyy/(.*)$ /$1 break;
proxy_pass http://ip:port;
break;
}
if ($white_employee_p = "1" ){
rewrite ^/xxxyyy/(.*)$ /$1 break;
proxy_pass http://10.54.19.7;
break;
}
#匹配不到跳转到静态页面,是nginx的html目录下的自定义页面
rewrite ^/xxxyyy/(.*)$ /yyyy/screen.html;
}
}
}