Nginx的location参数

dkm
dkm
2023-01-04 / 0 评论 / 8 阅读 / 正在检测是否收录...

location的语法规则

location 主要分为几个语法类型
符号类 [= ~ ~* ^~]
目录类 /xxx/
通用请求类 /

符号类解释
= 普通字符串精确匹配
^~ 带参数前缀匹配,当前只匹配该参数,其他的一律不匹配
~ 正则匹配,区分请求的大小写
~* 正则匹配,不区分请求的大小写
/x 普通前缀匹配
/ 一般为通用请求,无匹配时使用,对比上面优先级最小

上顺序为例,从上到下依次优先级降低

TIP A:

“=”,
示范
    location = /A001 {
        return 301 https://baidu.com;
    }

则请求的时候需要请求的URL后缀
/A001 200OK
/A001/ 404

TIP B:

“^~”
示范
    location ^~ /A001/ {
        return 301 https://baidu.com;
    }

如果写入该参数,则服务器仅匹配/A001/为目录参数开头的请求
例如
http://test.com/A001/ 200OK
http://test.com/A001/x 200OK
http://test.com/A001 404

如果遇到其他设置均由^~参数来处理

TIP C:

“~”
示范
    location ~ /A001 {
        return 301 https://baidu.com;
    }

请求区分大小写,则请求的参数与设置参数的大小写不一致,则返回404,如果服务器上面设置文件里面含上面的TIP B参数则下面所有参数全部中断请求
例如
http://test.com/A001 200OK
http://test.com/a001 404
http://test.com/A000 404

TIP D:

“~*”
示范1
    location ~* .(png|jpg|gif)$ {
    }

当需要请求静态文件的时候,不区分静态文件后缀的大小写
例如
http://test.com/1.Png 200OK
http://test.com/1.PNG 200OK
http://test.com/1.png 200OK

示范2
    location ~* /ABC {
    }

当请求携带目录的时候,不区分目录的大小写
例如
http://test.com/ABC 200OK
http://test.com/Abc 200OK
http://test.com/abc 200OK
http://test.com/abcd 404
如果在整体参数中间出现^~,则以^~为默认请求匹配,不请求~*参数匹配

TIP E:

“/xxx”
示范1
    location /test {
    }

当请求不携带任何参数的时候,默认匹配携带参数
例如
http://test.com/test 200OK
http://test.com/ 404

示范2
    location /test2 {
    }

例如
http://test.com/test2 200OK
http://test.com/test3 404
该请求匹配通用匹配中存在特定字符串的匹配

TIP F:

“/”
示范
    location / {
    }

此请求优先级最低,可以自定义目录请求
例如
http://test.com/ 200OK
http://test.com/ABC 200OK PS:前提是该网站默认目录下存在/ABC目录,否则返回404
http://test.com/i/1.png 200OK PS:前提是该网站的/i目录下存在1.png这个文件,否则返回404
该请求参数为所有请求参数中间优先级最低请求

综上参数TIP编号为例
优先级顺序为 A>B>C>D>E>F,F为优先级最低

------------------------------------分割符号------------------------------------

扩展应用

某网站的/admin目录(不区分大小写)不能通过域名test.com访问到,如果访问则返回403或者404错误

    server {
        listen 80;
        server_name test.com;
        location / {
            root /var/www/test.com;
            index index.html index.htm;
        }
        location ~* /admin {
            return 403;
        }

某网站test.com在访问/index目录的时候(不区分大小写)需要嵌套访问或者跳转到该网站公司的其他子网站http://test2.com/index

嵌套访问方法,使用反向代理

    server {
        listen 80;
        server_name test.com;
        location / {
            root /var/www/test.com;
            index index.html index.htm;
        }
        location ~* /index {
            proxy_pass http://test2.com/index;
        }

重定向方法,使用301

    server {
        listen 80;
        server_name test.com;
        location / {
            root/var/www/test.com;
            index index.html index.htm;
        }
        location ~* /index {
            return 301 http://test2.com/index;
        }

某网站访问的时候只允许访问默认页面,不得用任何URL做任何自定义请求,否则返回403

    server {
        listen 80;
        server_name test.com;
        location = / {
            root /var/www/test.com;
            index index.html index.htm;
        }
0

评论

博主关闭了所有页面的评论