反向代理配置

目录

反向代理配置:

使用场景:

1、proxy_pass 

作用:填的要代理的源站的IP地址或者域名。

格式:

几种location情况下的proxy_pass:

最正规写法:

关于代理的日志记录

2、proxy_set_header

作用:用来设定被代理服务器收到的header信息

2.1、proxy_set_header Host    设置代理到的IP上的虚拟主机

2.2、proxy_set_header  X-Real-IP   $remote_addr;

2.3、proxy_set_header X-Forwarded-For    $proxy_add_x_forwarded_for;

3、通常写法:


反向代理配置:

   

使用场景:

反向代理在负载均衡场景是用的最多的。
比如使用场景:
反向代理配置_第1张图片
国内在有限制的情况下,比如阿里云,一般80端口不会开,但是8080端口可以用,或者用IP地址也是可以访问的。
   
   

1、proxy_pass 

作用:填的要代理的源站的IP地址或者域名。

域名要能解析到对应服务器IP。

格式:

proxy_pass  +  http/https  +   域名/ IP / 主机名( 比如:负载均衡时设的主机名) 
反向代理配置_第2张图片

几种location情况下的proxy_pass:

假如访问的是  http://www.aaa.com/lwj/ccc.html 时下面几种写法会发生的跳转

location  /lwj/
{
        proxy_pass http://192.168.36.66;
}

访问http://www.aaa.com/lwj/ccc.html

结果 http://192.168.36.66/lwj/ccc.html

  proxy_pass 无 / 则会把包括匹配在内的位置整个接上  

  

location  /lwj/
{
        proxy_pass http://192.168.36.66/;
}

访问http://www.aaa.com/lwj/ccc.html

结果 http://192.168.36.66/ccc.html

  proxy_pass 有 / 则会把匹配的位置之后的接上  

当后面proxy_pass还接有目录时,只会取匹配后面的部分。

location  /lwj/
{
        proxy_pass http://192.168.36.66/linux ;
}

访问http://www.aaa.com/lwj/ccc.html

结果 http://192.168.36.66/linuxccc.html

      

location  /lwj/
{
        proxy_pass http://192.168.36.66/linux/ ;
}

访问http://www.aaa.com/lwj/ccc.html

结果 http://192.168.36.66/linux/ccc.html

  

最正规写法:

为了不搞混, proxy_pass最好都带上 / ,这样摘取匹配项后面的部分;遇到需要把匹配项也摘下来,就在 / 后加上匹配项就行了。如下
location  /lwj/
{
        proxy_pass http://192.168.36.66/lwj/;
}

访问http://www.aaa.com/lwj/ccc.html

结果 http://192.168.36.66/lwj/ccc.html

  
     

关于代理的日志记录

 代理后访问的地址是可以从代理机上的access_log中看到。
  
  
  
   
【首先这里要回忆一个概念】
  一个(IP)服务器上 是可以有多个域名的虚拟主机(server_name)。 
    
    

2、proxy_set_header

作用:用来设定被代理服务器收到的header信息

格式:proxy_set_header  XXX   value  ;

2.1、proxy_set_header Host    设置代理到的IP上的虚拟主机

1)当  没设置 proxy_set_header 时,会直接访问proxy_pass代理IP上的 默认虚拟主机内容。
比如 proxy_pass  http://192.168.36.66  就会访问192.168.36.66上的。
反向代理配置_第3张图片
   
   
2)当设置了  设置了 proxy_set_header Host $host 时,会访问proxy_pass的IP上该$host名字的虚拟主机。
比如下面就会访问到192.168.36.66上的 域名为 lwj.com.cn 的主机。
反向代理配置_第4张图片
    
  
3)当 设定Host 时, 
Host不一定非要用$host变量,可以用自己设定,尤其虚拟主机名变化的情况下,等于实际访问的IP上的域名和一开始的是不一样的。
比如 我是从 lwj.com.cn 访问的,要代理到 192.168.36.66上的 aaa.top 虚拟主机上。
反向代理配置_第5张图片
  
  
注意proxy_pass 的域名是仅用于解析成IP地址,不会影响解析到这个IP的服务器上以后访问哪个域名的虚拟主机,真正起作用的是proxy_set_header
   
比如下面,假如 公网解析 lwj.com.cn 是到 124.10.12.12 上,也就是下面截图的这台机上,这时出发了代理,如果我在这台机的 hosts 配上 lwj.com.cn到 192.168.36.66 ,则是代理到 192.168.36.66的 aaa.top 上。
反向代理配置_第6张图片

2.2、proxy_set_header  X-Real-IP   $remote_addr;

$remote_addr  访问端的IP地址。

2.3、proxy_set_header X-Forwarded-For    $proxy_add_x_forwarded_for;

$proxy_add_x_forwarded_for   记录代理的IP地址和远程客户端真实地址
例子:
客户端A ——> 代理服务器B  ——> 服务器C
在服务器C上收到的remote_addr其实是代理服务器B的IP,因为在C看来就是B访问了它。
这种情况如果想知道源访问的IP,就需要透传远程真实的客户端IP地址,用的就是$proxy_add_x_forwarded_for。 
这个变量通常会返回2个IP  ,前面的是源访问IP,后面的是代理IP

3、通常写法:

代理服务器上代理时都要写上这3条
 
proxy_set_header   Host  XXX;                #表明要访问的域名
proxy_set_header  X-Real-IP   $remote_addr;     #表明代理服务器的IP
proxy_set_header X-Forwarded-For    $proxy_add_x_forwarded_for;  #表明源客户端的IP

你可能感兴趣的:(Nginx,nginx)