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

如今手头上的项目是一个单页面应用,全部的页面和路由逻辑都是写死在一个js文件里的,因此路过想实现一个特定url调到对应的渲染页面的话,须要用js实现一个路由,而且在nginx上实现路径跳转到对应的js。这里的js路由使用react的route实现的。css

一 NGINX的配置

这里的 rewrite的配置和tryfiles的写法同样,你也能够用下面的配置实现前端

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

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

 

二 正常调用一个地址可以正确经过nginx路由到根目录的index页面

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

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

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

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

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

六 解决方案

为何其余路径都是ok的,是否是nginx把helpdoc或者help-doc这样的字作了关键字?改造全部的前端路由及链接,将helpdoc都改为assistssl

我在indexvm页面增长一段脚本,若是url能够经过nginx写回到根目录,就会弹出一个提示框pdo

从新加载以前404的页面,发现能够正确打出这个alert框,而且路径渲染成功路由

七 问题缘由

为何改一个路径就生效了?

第一段配置是什么?

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

因此缘由就是helpdoc被.do 匹配了而后这没有走第二段的重定向,直接落到了tomcat下。

问题修复很简单,将第一段配置改为以下,注意反斜杠转义
 

相关文章
相关标签/搜索