rewrite知多少

2019-10-08  本文已影响0人  yandaxin

首先mark两个博客:

1,nginx rewrite 指令last break区别最详细的解释

2,Nginx中的rewrite指令(break,last,redirect,permanent)

我的理解:
rewrite可以在server里面,也可以在server里的location里,
其中,在server里的rewrite和location,是先执行rewrite,再匹配location,无论二者位置如何。
last 会以重写后的结果发起新的请求,再次匹配location。
break 是本次重写后,即进入nginx的下一个阶段,产生数据输出的阶段。

如果一个location中有多个rewrite,last是第一次匹配到正则后,就结束在本location中的匹配,即这个location的last个匹配,然后重写的结果还是会走其他的location;而break是结束所有的location的匹配,即break 出nginx的rewrite阶段,进入下一个阶段,nginx有11个阶段。为了更可控,我们一般采用break。

除了常见的break和last,还有redirect和permanent


location的匹配规则

location [=|~|~*|^~] /uri/ { … }

匹配优先级:

1.匹配的顺序是先匹配普通字符串,然后再匹配正则表达式。另外普通字符串匹配顺序是根据配置中字符长度从长到短,也就是说使用普通字符串配置的location顺序是无关紧要的,反正最后nginx会根据配置的长短来进行匹配,但是需要注意的是正则表达式按照配置文件里的顺序测试。找到第一个匹配的正则表达式将停止搜索。

2.一般情况下,匹配成功了普通字符串location后还会进行正则表达式location匹配。有两种方法改变这种行为,其一就是使用“=”前缀,这时执行的是严格匹配,并且匹配成功后立即停止其他匹配,同时处理这个请求;另外一种就是使用“^~”前缀,如果把这个前缀用于一个常规字符串那么告诉nginx 如果路径匹配那么不测试正则表达式。

上一篇下一篇

猜你喜欢

热点阅读