nginx问题一则:nginx路径匹配特殊处理及增加cookie等二三事

有一个需求需要统一账号的登录,但是第三方应用的原生的登录界面登录以后,会被公司的前端检测没有登录的cookie拦截而跳转到公司自己的登录页面,因为是原生页面,所以只好后端处理这个cookie。由于不想在后台的java代码中增加相应的处理,所以在nginx上面打主意。

现有的nginx的配置如下,有一个/login,有一个*.html。

#/login路径跳转到 /login.html中
location ^~/login {
    rewrite ^(.*)$ /$1.html last;
}

#处理.html的路径
location ~ \.(html)$ {
   proxy_set_header Host $http_host;
   add_header Cache-Control "no-cache, no-store, max-age=0, must-revalidate";
   add_header Pragma no-cache;
	....省略部分代码.....

}

增加cookie的代码是

add_header Set-Cookie "cookieName=1; Domain=.xxx.com; Path=/" always;

首先我把这段代码给加到了 /login 的处理中,如下代码段中,但是没有成功,因为这里处理是rewrite,rewrite是实现URL重写的关键指令,不会带cookie,所以代码不能放在这里。

location ^~/login {
	add_header Set-Cookie "cookieName=1; Domain=.xxx.com; Path=/" always;
    rewrite ^(.*)$ /$1.html last;
}

然后就只能放到对\.(html) 路径的处理段中了。这时就要对路径进行匹配了,我想对login.html的路径进行匹配,然后只有访问这个路径时增加一个cookie。先把实现放出来。

location ~ \.(html)$ {
    proxy_set_header Host $http_host;
    add_header Cache-Control "no-cache, no-store, max-age=0, must-revalidate";
    add_header Pragma no-cache;
    #判断路径包含 /login 时进行特殊处理
    if ($request_uri ~* "/login") {
    	# 在根域 .xxx.com的/路径上面,增加cookieName的cookie,值为1
     	add_header Set-Cookie "cookieName=1; Domain=.xxx.com; Path=/" always;
    }
}

这里的$request_uri 变量,指的是完整的请求路径中去掉域名$host剩下的部分,如http://www.shutdown.cn/login/login.do 的这个地址,$request_uri就是 /login/login.do

if ($request_uri ~* "^/$") 表示url中只有域名,后面不跟任何东西,比如www.shutdown.cn。
if ($request_uri ~* "/login") 表示域名后面那串儿只要包含/login这个关键词,就可匹配成功。比如http://www.shutdown.cn/login.html
参考文档 nginx配置文件中$request_uri到底是指的url里哪部分

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值