• nginx反向代理时有无”/”的辨析


      nginx反向代理是日常使用nginx时最常用到的功能之一。在配置url的过程中,“/”的有无经常是影响我们配置成功的关键,也是困扰我们的问题所在。在此,结合实际例子,作简要辨析。

    场景一:利用根目录进行代理

    location / {
        proxy_pass http://example.test.com/;
    }
    location / {
        proxy_pass http://example.test.com;
    }

      这两个配置实现的效果是一样的。

    场景二:下面四种情况分别用http://192.168.1.10/proxy/test.html 进行访问。

    第一种情况:
    location  /proxy/ {
              proxy_pass http://127.0.0.1:8080/;
    }

    实现效果:当访问http://192.168.1.10/proxy/test.html时,会被代理到http://127.0.0.1:8080/test.html 这个url,并将结果返回给我们。

    第二种情况:(相对于第一种,最后少一个 /)
    location  /proxy/ {
              proxy_pass http://127.0.0.1:8080;
    }

    实现效果:当访问http://192.168.1.10/proxy/test.html时,会被代理到http://127.0.0.1:8080/proxy/test.html 这个url,并将结果返回给我们。

    第三种情况:
    location  /proxy/ {
              proxy_pass http://127.0.0.1:8080/real/;
    }

    实现效果:当访问http://192.168.1.10/proxy/test.html时,会被代理到http://127.0.0.1:8080/real/test.html 这个url,并将结果返回给我们。

    第四种情况(相对于第三种,最后少一个 / ):
    location  /proxy/ {
              proxy_pass http://127.0.0.1:8080/real;
    }

    实现效果:当访问http://192.168.1.10/proxy/test.html时,会被代理到http://127.0.0.1:81/realtest.html 这个url,并将结果返回给我们。

    分析如下: proxy_pass http://127.0.0.1/ 和proxy_pass http://127.0.0.1  ==>这个”/”,会使代理出来的结果完全不同。

    前者,相当于告诉nginx,我这个location,是代理访问到http://127.0.0.1这个server的,我的location是什么,nginx 就把location 加在proxy_pass 的 server 后面,这里是/proxy/,所以就相当于http://127.0.0.1/proxy/。如果是location /blog/ 就是代理访问到http://127.0.0.1/blog/。

    后者,相当于告诉nginx,我这个location,是代理访问到http://127.0.0.1/的,http://127.0.0.1/proxy/ == http://127.0.0.1/ ,可以这样理解。改变location,并不能改变返回的内容,返回的内容始终是http://127.0.0.1/ 。 如果是location /blog/ ,那就是 http://127.0.0.1/blog/ == http://127.0.0.1/ 。

    这样,也可以解释了上面那个location / 的例子,/ 嘛,加在server 的后面,仍然是 / ,所以,两种写法出来的结果是一样的。

    注意: 如果是 location ~* ^/proxy/(.*).html 这种正则的location,是不能写”/”上去的,nginx -t 也会报错的了。因为,路径都需要正则匹配了嘛,并不是一个相对固定的locatin了,必然要代理到一个server。

  • 相关阅读:
    Java8新特性
    搜索解决方案 -- ElasticSearch入门
    插入排序
    单点登录系统CAS入门
    快速排序
    选择性排序
    冒泡排序
    springcloud入门
    消息中间件 -- RabbitMQ
    ActiveMQ中消息的重发与持久化保存
  • 原文地址:https://www.cnblogs.com/bdhk/p/7832233.html
Copyright © 2020-2023  润新知