前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >nginx配置学习--反向代理篇

nginx配置学习--反向代理篇

作者头像
qsjs
发布2020-06-09 10:40:31
5770
发布2020-06-09 10:40:31
举报
文章被收录于专栏:MyPanda的学习笔记

通常情况下,我们访问互联网的时候,这个交互过程类似下图所示:

反向代理示意图

这里主要讨论服务器端的情况,在上图中,服务端侧的Server Proxy 就是一个反向代理服务器。

反向代理的好处是:

A. 对internet上的用户来说,屏蔽了后端服务器的真实地址,在一定程度上保证了后端服务器的安全;

B. 通过反向代理,后端可以设置很多的服务器一起提供相同的服务,从而增大后端服务器的业务承载能力;

但事物都是具有两面性的,对于服务器来说,反向代理提供了上述两条好处,同时也带来了如下不方便的地方:

  1. 服务器如何才能获得用户的真实访问IP ? (这里的IP指用户端的public IP, 因为在目前IPV4为主流的网络环境中,用户的上网设备获得的IP基本都是私有IP, 用户请求发出后,经过的第一个公有IP就是这里所谓的‘用户真实IP’)
  2. 用户的请求如果经过了多层反向服务器的代理,那么如何记录这个请求到底都被哪些代理服务器处理过?

remote_addr就是客户端的真实IP。 如果使用了反向代理,很明显无法通过remote_addr来获得client的真实IP,但是如果我们在client所遇到的第一个反向代理中获取该 remote_addr的值,并保存到某一个变量中,那么后续可以通过访问这个变量来获得真正的client 的IP,这个变量就是 http_x_real_ip, 所以我们获取用户真实IP地址的做法通常是: 在第一个反向代理中配置: proxy_set_header X-Real-IP remote_addr ,在server中使用 http_x_real_ip的方式来引用,从而获得用户的真实IP地址。 至此,我们就解决了: 获取用户真实IP的问题 以及 获取最后一跳的反向代理地址的问题。

http_x_forwarded_for 的第一个值,应该就是client的IP, 因为此时reverse proxy1和client 属于client-server 模式,而reverse proxy1充当了server的角色; 而前面讲了,获取客户端的IP一般是通过 $http_x_real_ip来获取,那是否也可以通过 $http_x_forwarded_for的第一个值来获取呢?一般不建议这样做,因为用户发送请求的时候,可以通过伪造http头,从而使得$http_x_forwarded_for的值不可靠,所以用 $http_x_real_ip来获取更可靠,因为$remote_addr是无法通过构造http的head 来伪造的

作者:My熊猫眼

链接:https://cloud.tencent.com/developer/article/1640245

来源:简书

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档