一个诡异的ngnix配置重定向问题的排查

本文介绍了一个单页面应用中Nginx与React前端路由出现冲突的问题,详细解析了问题产生的原因——Nginx配置中的正则表达式误匹配导致特定URL未被正确重定向。并给出了具体的解决方案,包括调整Nginx配置和前端路由设置。

现在手头上的项目是一个单页面应用,所有的页面和路由逻辑都是写死在一个js文件里的,所以路过想实现一个特定url调到对应的渲染页面的话,需要用js实现一个路由,并且在nginx上实现路径跳转到对应的js。这里的js路由使用react的route实现的。

一 NGINX的配置

134627_jI99_195637.png

这里的 rewrite的配置和tryfiles的写法一样,你也可以用下面的配置实现

但是某个页面还是没有跳转成功。nginx的accsslog出现了如下的记录.很明显,第二个路径被nginx干掉了

10.207.87.51?23355?-?[20/Jun/2016:16:36:07?+0800]?"GET?http://xxx.com/specs/indicator/tab/atom"?200?998?"-"?"Mozilla/5.0?(Windows?NT?6.1;?WOW64)?AppleWebKit/537.36?(KHTML,?like?Gecko)?Chrome/48.0.2564.109?Safari/537.36"?"-"?"-"?"0acf573314664117679067908e"
?
10.207.87.51?1947?-?[20/Jun/2016:16:34:33?+0800]?"GET?http://xxx.com/help-doc/helpdoc/chanpin"?302?258?"-"?"Mozilla/5.0?(Windows?NT?6.1;?WOW64)?AppleWebKit/537.36?(KHTML,?like?Gecko)?Chrome/48.0.2564.109?Safari/537.36"?"-"?"-"?"0acf573314664116733311513e"

 

二 正常调用一个地址能够正确通过nginx路由到根目录的index页面

http://xxx.com/specs/indicator/tab/atom 它的reponse是index页面

三 访问新加的地址没有正确通过ngnix的路由,而是越过了ngnix直接打到了tomcat的对应地址

http://xxx.com/help-doc/helpdoc/chanpin 路径B 没有redirect到index页面.reopnse也是调进了tomcat的对应页面

四 随机访问一个不正确的地址,nginx可以正确路由到根目录的index文件

为了验证是不是NGINX的问题,这里再随机访问一个不存在的页面,通过nginxlocation的配置也应该返回index的内容。实际上正好返回的是nginx的内容

六 解决方案

为什么其他路径都是ok的,是不是nginx把helpdoc或者help-doc这样的字做了关键字?改造所有的前端路由及连接,将helpdoc都改成assist

我在indexvm页面增加一段脚本,如果url可以通过nginx写回到根目录,就会弹出一个提示框

重新加载之前404的页面,发现可以正确打出这个alert框,并且路径渲染成功

七 问题原因

为什么改一个路径就生效了?

第一段配置是什么?

135145_9wbQ_195637.png

请注意 .do 点在正则里是任意字符的意思,那我出错的地址是什么helpdoc啊。helpdoc里有什么,do吖。。。

所以原因就是helpdoc被.do 匹配了然后这没有走第二段的重定向,直接落到了tomcat下。

问题修复很简单,将第一段配置改成如下,注意反斜杠转义
135212_aKZ9_195637.png
 

转载于:https://my.oschina.net/zimingforever/blog/699827

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值