站長(zhǎng)資訊網(wǎng)
        最全最豐富的資訊網(wǎng)站

        掌握Nginx的location優(yōu)先級(jí)

        前言

        近幾年Nginx在企業(yè)上的應(yīng)用很廣泛,但很多朋友還是不知道Nginx的location優(yōu)先級(jí),如果不能清晰的掌握nginx的location優(yōu)先級(jí),就會(huì)在配置Nginx的時(shí)候引起錯(cuò)誤的跳轉(zhuǎn),錯(cuò)誤的跳轉(zhuǎn)往往就是一次嚴(yán)重的線上事故。因此,掌握Nginx的location優(yōu)先級(jí)非常重要。

        先來一個(gè)最簡(jiǎn)單的nginx配置

        worker_processes  1;
        events {
        worker_connections  1024;
        }
        http {
        include      mime.types;
        default_type  application/octet-stream;
        sendfile        on;
        keepalive_timeout  65;

        server {
            listen 80;
            location / {
                return 400;
            }
        }
        }

        location /是通配的,也就是所以請(qǐng)求都能匹配,但它的優(yōu)先級(jí)我們暫時(shí)還不知道。請(qǐng)求結(jié)果如下:

        掌握Nginx的location優(yōu)先級(jí)

        多個(gè)通配的優(yōu)先級(jí)測(cè)試,加入location /test

                    location / {
                            return 400;
                    }
                    location /test {
                            return 401;
                    }

        加入location /test,我們故意把位置放到location /以下,來驗(yàn)證優(yōu)先級(jí)。請(qǐng)求結(jié)果如下,返回401,從結(jié)果可以看出來/test的優(yōu)先級(jí)高于location /。不過用戶的訪問要以/test開頭,不是以/test開頭還是命中到location /:

        掌握Nginx的location優(yōu)先級(jí)

        location正則的優(yōu)先級(jí)測(cè)試,我們加入~ ^/test,使用正則匹配以test開頭的

                    location / {
                            return 400;
                    }
                    location /test {
                            return 401;
                    }
                    location ~ ^/test {
                            return 402;
                    }

        加入location ~ ^/test,我們故意再把它放到最后,來驗(yàn)證優(yōu)先級(jí)。請(qǐng)求結(jié)果如下,返回402,從結(jié)果可以看出來正則的優(yōu)先級(jí)要大于location /和location /test,也就是正則location大于通配location

        掌握Nginx的location優(yōu)先級(jí)

        多個(gè)正則的優(yōu)先級(jí)測(cè)試,我們使用兩個(gè)正則,主要是來驗(yàn)證下,是不是正則配置得越多,優(yōu)先級(jí)就越高。如下的配置

                  location ~ ^/test {
                            return 402;
                    }

                    location ~ ^/test/aaa {
                            return 403;
                    }

        加入^/test/aaa,我們一樣把它放到最后,請(qǐng)求/test/aaa。結(jié)果返回402,也就是匹配到第一個(gè)正則后,底下的正則不會(huì)再去匹配。由于請(qǐng)求/test/aaa,命中^/test,所以底下的正則就無效了:

        掌握Nginx的location優(yōu)先級(jí)

        我們加入精準(zhǔn)匹配,也就是nginx的=,我們來測(cè)試下精準(zhǔn)匹配的優(yōu)先級(jí)

                    location ~ ^/test/aaa {
                            return 403;
                    }

                    location = /test/aaa {
                            return 404;
                    }

        我們故意把= /tmp/aaa放到最后,這個(gè)只能匹配到/test/aaa的請(qǐng)求,得到的結(jié)果如下,返回404。這個(gè)說明了,精準(zhǔn)匹配=的優(yōu)先級(jí)是最高的,不管它放到哪里。

        掌握Nginx的location優(yōu)先級(jí)

        問題1:為什么我的nginx設(shè)置了全局跳轉(zhuǎn),但怎么不生效?

                    location / {
                            rewrite xxx xxxx;
                    }

                    location ~* ^/test {
                            return 402;
                    }

        如果是以上的跳轉(zhuǎn)配置的話,大家根據(jù)優(yōu)先級(jí)來,可以發(fā)現(xiàn)location /的優(yōu)先級(jí)是最低的,所以全局跳轉(zhuǎn)不生效。因?yàn)楫?dāng)用戶訪問到/test/xx的時(shí)候,命中到其它location了。所以全局跳轉(zhuǎn)的話,保留一個(gè)location /即可。

        問題2:為什么我的nginx動(dòng)靜分離配置失敗了?

                    location ~ ^/test {
                            root xxxx;
                    }

                    location ~ .jsp$ {
                            proxy_pass xxxx;
                    }

        如果是以上配置的話,當(dāng)用戶訪問到/test/xxx.jsp的時(shí)候,就命令到location ~ ^/test了。所以動(dòng)靜分離如果都使用正則的話,需要注意location的放置位置。

        總結(jié)如下:

        1 匹配優(yōu)先級(jí)如下

        ① = 精確匹配
        ② ^~ 優(yōu)先匹配常規(guī)字符串,匹配后,不檢查正則
        ③ ~* 正則匹配 示例: ~*.(gif|jpg|jpeg)$
        ④ / documents/ 匹配常規(guī)字符 documents 代表目錄,可以是其他值
        ⑤ / 所有l(wèi)ocation無法匹配,則顯示該默認(rèn)匹配

        以上可以都有,也可以都沒有,如果都有,則按照以上優(yōu)先級(jí)匹配。

        2 匹配的時(shí)候如果有正則,如上面③的示例,則網(wǎng)址最后一項(xiàng)是.gif 即可匹配成功,在.gif前面的目錄是不存在的也能匹配。

        /documents 如果要匹配成功,上級(jí)目錄必須是存在的。

        3 正則寫法必須有~或~* 否則無效

        贊(0)
        分享到: 更多 (0)
        網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)
        主站蜘蛛池模板: 国语精品一区二区三区| 一本一本久久a久久综合精品蜜桃| 精品国产爽爽AV| 精品久久久久久无码专区不卡| 精品偷自拍另类在线观看丰满白嫩大屁股ass | 国产精品亚洲玖玖玖在线观看| 国产欧美亚洲精品A| 亚洲人成国产精品无码| 精品久久久久久久中文字幕| 中文字幕精品一区二区日本| 国产成人精品亚洲日本在线| 精品国产乱码久久久久久1区2区| 中文字幕精品久久| 亚洲一区无码精品色| 亚洲国产精品成人午夜在线观看 | 国产精品国产三级专区第1集| 久久精品麻豆日日躁夜夜躁| 一本之道av不卡精品| 日韩欧美国产精品第一页不卡| 精品久久人人做人人爽综合| 国产精品日韩欧美久久综合| 999久久久国产精品| 日本精品中文字幕| 87国产私拍福利精品视频| 一区二区三区日韩精品| 日韩欧美精品不卡| 国产高清精品在线| 精品97国产免费人成视频| 国产在线精品一区二区高清不卡| 国产精品永久免费视频| 久久99精品久久久久久野外| 久久久精品人妻无码专区不卡 | 国产精品激情综合久久| 欧美精品一本久久男人的天堂| 国产精品嫩草视频永久网址| 精品国产第1页| 欧美一卡2卡3卡四卡海外精品| 2022精品国偷自产免费观看| 国产精品无码无卡无需播放器| 国产精品亚洲综合一区| 久久久久无码国产精品不卡 |