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的任何配置


  • 2019-04-25 15:40:16

    JS对象是否拥有某属性如何判断

    原型链上继承过来的属性无法通过hasOwnProperty检测到,返回false。 需注意的是,虽然in能检测到原型链的属性,但for in通常却不行。

  • 2019-04-30 11:23:36

    elasticsearch和analysis-ik的安装使用

    全文搜索和中文分词主要介绍了两组全文搜索加中文分词方案; TNTSearch+jieba-php这套组合对于博客这类的小项目基本够用了;

  • 2019-04-30 11:42:24

    php7+laravel+coreseek(sphinx)中文搜索初步实现(Linux)

    官网www.coreseek.cn已不能下载,所以需从网上找资源, 注意的一点是,笔者安装coreseek-3.2.14版本后,使用时提示client版本高于server版本的错误, php的sphinx扩展,为使用者,为client;coreseek是系统服务,为server

  • 2019-04-30 13:55:13

    浅谈mysql fulltext全文索引优缺点

    为什么会注意到mysql的fulltext? nima, 还是上次innodb转成tokudb引擎的事,这次alter修改表引擎的时候,提示percona tokudb是不支持fulltext索引的.