nginx的proxy_pass路径转发规则浅析(末尾/问题)

2019-09-09 09:38:34

参考链接 nginx的proxy_pass路径转发规则浅析(末尾/问题) 另外,比如  /api/good/list  与 /api/list  怎么区分


答案:     

     location ~ ^/api/.*/.*{

                        proxy_pass http://127.0.0.1:8080;

                                }

                location / {

                        try_files $uri $uri/ /index.php?$query_string;

                }


一 location匹配路径末尾没有 /

此时proxy_pass后面的路径必须拼接location的路径:

1

2

3

4

5

6

7

8

location /sta

{

   proxy_redirect off;

   proxy_set_header        Host $host;

   proxy_set_header        X-Real-IP $remote_addr;

   proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;

   proxy_pass http://192.168.1.31/sta;

}


  • 外面访问:http://192.168.1.30/sta/sta1.html

  • 相当于访问:http://192.168.1.31/sta/sta1.html

注:这里也可以写成:“proxy_pass http://192.168.1.31/sta/;”。当然,不推荐使用上面这种写法

二 location匹配路径末尾有 /

此时proxy_pass后面的路径需要分为以下四种情况讨论:

(1)proxy_pass后面的路径只有域名且最后没有 /:


1

2

3

4

5

6

7

8

location /sta/

{

   proxy_redirect off;

   proxy_set_header        Host $host;

   proxy_set_header        X-Real-IP $remote_addr;

   proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;

   proxy_pass http://192.168.1.31;

}


  • 外面访问:http://192.168.1.30/sta/sta1.html

  • 相当于访问:http://192.168.1.31/sta/sta1.html

(2),


1

2

3

4

5

6

7

8

location /sta/

{

   proxy_redirect off;

   proxy_set_header        Host $host;

   proxy_set_header        X-Real-IP $remote_addr;

   proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;

   proxy_pass http://192.168.1.31/;

}


  • 外面访问:http://192.168.1.30/sta/sta1.html

  • 相当于访问:http://192.168.1.31/sta1.html

(3)proxy_pass后面的路径还有其他路径但是最后没有 /:

1

2

3

4

5

6

7

8

location /sta/

{

   proxy_redirect off;

   proxy_set_header        Host $host;

   proxy_set_header        X-Real-IP $remote_addr;

   proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;

   proxy_pass http://192.168.1.31/abc;

}


  • 外面访问:http://192.168.1.30/sta/sta1.html

  • 相当于访问:http://192.168.1.31/abcsta1.html

(4)proxy_pass后面的路径还有其他路径同时最后有 /:


1

2

3

4

5

6

7

8

location /sta/

{

   proxy_redirect off;

   proxy_set_header        Host $host;

   proxy_set_header        X-Real-IP $remote_addr;

   proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;

   proxy_pass http://192.168.1.31/abc/;

}


  • 外面访问:http://192.168.1.30/sta/sta1.html

  • 相当于访问:http://192.168.1.31/abc/sta1.html

附:在nginx上面配置APK文件下载路径:

1

2

3

4

5

6

7

8

9

location ^~ /h5/appdownload/

{

      proxy_redirect off;

      proxy_set_header        Host $host;

      proxy_set_header        X-Real-IP $remote_addr;

      proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;

      proxy_pass http://192.168.1.31/;

      proxy_set_header   Cookie $http_cookie;

}


  • 外面访问:http://test.com/h5/appdownload/Demo_1.0.0.apk

  • 相当于访问:http://192.168.1.31/Demo_1.0.0.apk

每次更新apk文件,只需要上传新的apk文件到192.168.1.31服务器,然后再更新对外的下载地址为http://test.com/h5/appdownload/newName.apk即可,并不需要更改nginx的任何配置


  • 2020-02-19 23:26:58

    php array_pop 删除数组最后一个元素实例

    php array_pop函数将数组最后一个单元弹出(出栈),即删除数组的最后一个元素。本文章通过php实例向大家讲解array_pop函数的使用方法。

  • 2020-02-20 18:35:21

    Vue加载组件、动态加载组件的几种方式

    组件是Vue.js最强大的功能之一。组件可以扩展HTML元素,封装可重用的代码。在较高层面上,组件是自定义的元素,Vue.js的编译器为它添加特殊功能。在有些情况下,组件也可以是原生HTML元素的形式,以is特性扩展。

  • 2020-02-22 13:58:50

    深入理解 requestAnimationFrame

    在Web应用中,实现动画效果的方法比较多,Javascript 中可以通过定时器 setTimeout 来实现,css3 可以使用 transition 和 animation 来实现,html5 中的 canvas 也可以实现。除此之外,html5 还提供一个专门用于请求动画的API,那就是 requestAnimationFrame,顾名思义就是请求动画帧。 为了深入理解 requestAnimationFrame 背后的原理,我们首先需要了解一下与之相关的几个概念: