0
点赞
收藏
分享

微信扫一扫

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

西风白羽 2022-05-27 阅读 45

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​



举报

相关推荐

0 条评论