nginx location中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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

未来AI编程

共鸣===鼓励 打赏您随意

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值