nginx location中uri的截取的实现方法

举报
隔壁老汪 发表于 2022/06/24 00:37:44 2022/06/24
【摘要】 location 中的 root 和 alias root 指令只是将搜索的根设置为 root 设定的目录,即不会截断 uri,而是使用原始 uri 跳转该目录下查找文件aias 指令则会截断匹配的 uri,然后使用 alias 设定的路径加上剩余的 uri 作为子路径进行查找 location 中的 proxy_pass 的 uri...

location 中的 root 和 alias

  • root 指令只是将搜索的根设置为 root 设定的目录,即不会截断 uri,而是使用原始 uri 跳转该目录下查找文件
  • aias 指令则会截断匹配的 uri,然后使用 alias 设定的路径加上剩余的 uri 作为子路径进行查找

location 中的 proxy_pass 的 uri

如果 proxy_pass 的 url 不带 uri

  • 如果尾部是"/",则会截断匹配的uri
  • 如果尾部不是"/",则不会截断匹配的uri

如果proxy_pass的url带uri,则会截断匹配的uri

Examples

location中的 root

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

root@pts/1 $ ls -ld /data/web/lctest*|awk '{print $NF}'

/data/web/lctest

/data/web/lctest2

/data/web/lctest3

/data/web/lctest4

location /lctest {

  root /data/web/;

}

location /lctest2/ {

  root /data/web/;

}

location /lctest3 {

  root /data/web;

}

location /lctest4/ {

  root /data/web;

}

curl 测试结果如下

备注: 浏览器输入的时候最后面不添加 / , 会自动补上,但是curl 不行

1

2

3

4

5

6

7

8

9

10

11

12

13

14

root@pts/1 $ curl http://tapi.xxxx.com/lctest/

hello world

root@pts/1 $ curl http://tapi.xxxx.com/lctest2/

hello world

2

root@pts/1 $ curl http://tapi.xxxx.com/lctest3/

3

hello world

root@pts/1 $ curl http://tapi.xxxx.com/lctest4/

hello world

4

location alias

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

location /lctest5 {

  alias /data/web/;

}

location /lctest6/ {

  alias /data/web/;

}

location /lctest7 {

  alias /data/web;

}

## 403 /data/web forbidden

location /lctest8/ {

  alias /data/web;

}

curl 测试结果如下

1

2

3

4

5

6

7

8

9

10

11

12

13

curl 'http://tapi.kaishustory.com/lctest5/'

curl 'http://tapi.kaishustory.com/lctest6/'

curl 'http://tapi.kaishustory.com/lctest7/'

结果都是 /data/web/index.html的输出

root@pts/1 $ curl 'http://tapi.kaishustory.com/lctest8/'

<head>403 Forbidden</title></head>

"white">

403 Forbidden<

/h1></center>

nginx<
/center>

</body>

</html>

location proxy_pass

1

2

3

4

5

6

7

8

9

#--------proxy_pass配置---------------------

location /t1/ { proxy_pass http://servers; }  #正常,不截断

location /t2/ { proxy_pass http://servers/; }  #正常,截断

location /t3 { proxy_pass http://servers; }  #正常,不截断

location /t4 { proxy_pass http://servers/; }  #正常,截断

location /t5/ { proxy_pass http://servers/test/; }  #正常,截断

location /t6/ { proxy_pass http://servers/test; }  #缺"/",截断

location /t7 { proxy_pass http://servers/test/; }  #含"//",截断

location /t8 { proxy_pass http://servers/test; }  #正常,截断

测试脚本

1

2

3

4

5

6

for i in $(seq 8)

do

  url=http://tapi.xxxx.com/t$i/doc/index.html

  echo "-----------$url-----------"

  curl url

done

测试结果

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

----------http://tapi.xxxx.com/t1/doc/index.html------------

/t1/doc/index.html

----------http://tapi.xxxx.com/t2/doc/index.html------------

/doc/index.html

----------http://tapi.xxxx.com/t3/doc/index.html------------

/t3/doc/index.html

----------http://tapi.xxxx.com/t4/doc/index.html------------

/doc/index.html

----------http://tapi.xxxx.com/t5/doc/index.html------------

/test/doc/index.html

----------http://tapi.xxxx.com/t6/doc/index.html------------

/testdoc/index.html

----------http://tapi.xxxx.com/t7/doc/index.html------------

/test//doc/index.html

----------http://tapi.xxxx.com/t8/doc/index.html------------

/test/doc/index.html

文章来源: blog.csdn.net,作者:隔壁老瓦,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/wxb880114/article/details/118221423

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。