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;
-
- }
-
- }
- }