#location解读 参考nginx的官方文档,让我们用一个例子解释location的用法:
location = / { [ configuration A ]}location / { [ configuration B ]}location /documents/ { [ configuration C ]}location ^~ /images/ { [ configuration D ]}location ~* \.(gif|jpg|jpeg)$ { [ configuration E ] }
请求“/”匹配配置A, 请求“/index.html”匹配配置B, 请求“/documents/document.html”匹配配置C, 请求“/images/1.gif”匹配配置D, 请求“/documents/1.jpg”匹配配置E。 </br> /路径匹配</br> =严格匹配</br> ~和~* 模式匹配,URL可以使用正则表达式,~区分大小写,~不区分大小写</br> ^~ 模式匹配,不使用正则表达式。</br> (1)=号,表示严格匹配,如果找到就停止搜索,A属于严格匹配。</br> (2)常规字符匹配,BC属于常规匹配,匹配长度越长优先级越高所以/index.html匹配B。</br> (3)正则匹配,DE属于正则匹配,正则匹配的优先级高,如果一个url同时符合常规字符匹配和正则匹配,那么访问正则匹配,所以/ documents/1.jpg访问E。</br> 优先级 (= |^~) > (~) > (~|~) > (/|/dir/)</br>
####location 的执行逻辑跟 location 的编辑顺序无关。</br> 矫正:这句话不全对,“普通 location ”的匹配规则是“最大前缀”,因此“普 通 location ”的确与 location 编辑顺序无关;</br> 但是“正则 location ”的匹配规则是“顺序匹配,且只要匹配到第一个就停止后面的匹配”;“普通location ”与“正则 location ”之 间的匹配顺序是?先匹配普通 location ,再“考虑”匹配正则 location 。注意这里的“考 虑”是“可能”的意思,也就是说匹配完“普通 location ”后,有的时候需要继续匹配“正 则 location ”,有的时候则不需要继续匹配“正则 location ”。</br> 两种情况下,不需要继续 匹配正则 location :( 1 )当普通 location 前面指定了“ ^~ ”,特别告诉 Nginx 本条普 通 location 一旦匹配上,则不需要继续正则匹配;( 2 )当普通location 恰好严格匹配上 ,不是最大前缀匹配,则不再继续匹配正则