Nginx正向代理和反向代理什么区别?( 二 )


 
此时就需要在nginx配置的location块中添加
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for注意这里的意思是增加到X-Forwarded-For中,不是覆盖,而增加后的格式就是之前说的“client1,proxy1....”,默认的时候X-Forwarded-For是空的,如果有两个nginx,并且都配置了上面这个命令,则会在web服务器的request.getHeader("X-Forwarded-For")获得的是“用户ip,第一个nginx的ip”,分别对应之前的格式 。
proxy_add_forwarded_for包含着两个格式,前面一部分是请求头的X-Forwarded-For,而后面$remote_addr,也就是说是远程用户的ip
 
我们来个图浅显的解释下:

Nginx正向代理和反向代理什么区别?

文章插图
 
X-real-ip与X-Forwarded-For的区别
  • X-real-ip是覆盖,而X-Forwarded-For是后面添加
  • 举个例子,请求由1.1.1.1发出,经过三层代理,第一层是2.2.2.2,第二层是3.3.3.3,而本次请求的来源IP4.4.4.4是第三层代理,
  • 而X-Real-IP,没有相关标准,上面的例子,如果配置了X-Read-IP,可能会有两种情况:
最后一跳是正向代理,可能会保留真实客户端IP:X-Real-IP: 1.1.1.1
最后一跳是反向代理,比如Nginx,一般会是与之直接连接的客户端IP:X-Real-IP: 3.3.3.3
  • 而X-Forwarded-For的结果则是
X-Forwarded-For:1.1.1.1, 2.2.2.2, 3.3.3.3
【Nginx正向代理和反向代理什么区别?】


推荐阅读