详解正向代理的真实场景应用

详解正向代理的真实场景应用

我们项目中大量使用 Nginx 作为正向代理和反向代理,这里举一个我用 Nginx 作为正向代理的真实案例。

背景

公司生产一些硬件设备,而这些设备在生产的过程中,需要调用我们后台系统的接口,我们后台系统所在的网络和设备的网络并不在同一个网段内,想要实现网络互通,我们在设备和系统之间加了一层正向代理服务器,设备先将请求发送给代理服务器,由代理服务器将请求转发给后台系统。

解决方案

如下图所示:

设备 1 和设备 2 的 IP 在 192.168.1.0/24 IP 地址段内,HTTP 请求先发到代理服务器,然后转发到后台服务器集群的网关地址(192.168.52.123)。

代理服务器上有两个网卡,和设备之间的网络是通的,和服务器集群之间的网络也是通的。这样就能保证设备的请求能够正常发送到系统了。

疑问:为啥不把后台系统的服务器 IP 改成和设备同一网段?

答: 问题出在不能保证设备和后台系统在同一局域网内。有的设备是在其他局域网内生产的,即使在同一个网段内,但是是跨局域网的,设备和后台系统也是无法连通的。

项目中如何使用正向代理

以下是一个 Nginx 的正向代理的配置,

ini 复制代码
http {
    server {
        listen       80;
        server_name  www.passjava.cn;

        location / {
            proxy_pass http://target_server;
            proxy_set_header Host $host;
        }
    }
}

完整的 NGINX 配置如下:

正向代理后如何获取真实 IP

另外我们的系统还需要获取设备的真实 IP,这就需要在 Nginx 加上配置:

bash 复制代码
# location 模块中加入以下配置:
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

上述配置可以暴露客户端的真实 IP 地址给目标服务器,特别是 proxy_set_header X-Real-IP $remote_addr; 和 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 这两行配置。

让我解释一下这三行配置的含义:

  1. proxy_set_header Host $host;:这一行配置将客户端请求中的 Host 头部信息传递给目标服务器。这是正常的 HTTP 头部信息传递,不涉及客户端 IP 地址。
  2. proxy_set_header X-Real-IP $remote_addr;:这一行配置将客户端的真实 IP 地址作为 X-Real-IP 头部信息传递给目标服务器。这意味着目标服务器可以访问到客户端的真实 IP 地址。
  3. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;:这一行配置将客户端的 IP 地址添加到 X-Forwarded-For 头部信息中,并传递给目标服务器。这是为了记录代理请求的前几个客户端的 IP 地址,通常包括客户端的真实 IP 地址。

当目标服务器收到这些头部信息时,它可以通过 X-Real-IP 或 X-Forwarded-For 头部来获取客户端的真实 IP 地址。

相关推荐
你看我名字1 小时前
云计算工程师技能树:从 Linux 基础到云平台架构能力
linux·架构·云计算
晶捷软件9 小时前
从 IT 架构视角看 ERP 选型:用友、金蝶与鼎捷生态(含晶捷智能)的技术差异
架构·智能制造·erp·制造业信息化
@大迁世界9 小时前
Firefox 本地模式:localhost 再见了 ?
前端·架构
深蓝AI9 小时前
总榜第一不等于最划算:Intelligence Index v5 换代后,模型选型要算的三笔账
程序员·架构
天远数科9 小时前
零信任架构实战:基于天远企业股权变更构建自动化商业银行对公授信存续期股权异动与资产抽逃预警网关
运维·人工智能·架构·自动化
AI你一生一世10 小时前
当“暂停“成为架构决策:从签证系统停摆看高可用设计的边界
架构·系统架构·流量控制·幂等性·高可用设计·优雅降级·状态一致性
米米商聊11 小时前
同名附件为什么被 Map 覆盖?重复键与一对多索引
前端·javascript
echome88812 小时前
Python 异常处理:try、else、finally 的正确搭配
开发语言·前端·python·异常处理·编程技巧
时间的情敌12 小时前
OpenLayers 实战|Vue3 + OpenLayers 完整工程案例(加载天地图、要素、弹窗、绘制、WFS)
前端·openlayers
陈随易12 小时前
下载神器!Motrix 停更三年后重写回归
前端·后端·程序员