【nginx常用作反响代理】--特别是网络环境隔离的情况下。访问一台机器只能通过一台代理的proxy才能访问的情况。



但是proxy_pass指令中 "/" 是否加在后端服务器的uri中是有很大的区别的。


如: 一个简单例子

[root@cuizhiliang conf.d]# cat test.conf 
server {
    listen 80 default_server;
    server_name _;
    location /test/ {
        proxy_pass http://10.59.87.11;    
    }
}


proxy_pass http://10.59.87.11; 和 proxy_pass http://10.59.87.11/; 是有区别的。

在nginx中配置proxy_pass时,如果是按照location匹配路径时, 要注意如果proxy_pass后面的url加了"/"。那就表示的是绝对路径,代理的时候不会加上被location匹配的部分。 如果未加"/" 则会当location匹配的部分都加上。


如请求:

curl http://127.0.0.1/test/index.html


在第一种情况下,被代理的去请求的路径其实就是: http://10.59.87.11/test/index.html

在第二种情况下,被代理的去请求的路径其实就是: http://10.59.87.11/index.html


这个请求访问日志可以在 10.59.87.11 这台机器上去。





用途最简单的代理功能,被请求的一个server_name就代理到另外一台机器去:

server {

    listen 80; 

    server_name test-ops.abc.com;


    location / {

proxy_pass http://10.59.72.191;

    }

}



被请求的一个server_name代理到一组(upstream 定义好了)服务器中取

upstream ops {

    server 10.59.72.191:80;

    server 10.59.72.192:80;

    ip_hash;

    }

server {

    listen 80; 

    server_name ops.abc.com;


    location / {

proxy_pass http://ops;

    }

}