OpenResty Edge 客户端真实 IP 全链路传递指南

OpenResty Edge 客户端真实 IP 全链路传递指南

💡 原文中文,约9500字,阅读约需23分钟。
📝

内容提要

本文介绍了OpenResty Edge处理客户端真实IP的四种方案:Proxy Protocol、X-Forwarded-For、X-Real-IP和自定义头。每种方案适用于不同的代理拓扑,文中详细说明了配置步骤和安全注意事项,以确保准确还原用户真实IP,支持访问控制和限速等功能。

🎯

关键要点

  • 在引入前置代理、CDN 或四层负载均衡后,网关收到的客户端地址往往变成代理服务器的 IP,导致基于用户真实 IP 的限速、访问控制和审计日志失效。
  • OpenResty Edge 支持四种真实 IP 还原方案:Proxy Protocol、X-Forwarded-For、X-Real-IP 和自定义头,适用于不同的代理拓扑和协议层。
  • Proxy Protocol 适用于四层 TCP/UDP Stream 代理,前置代理在建立 TCP 连接时注入一行标准化的 PROXY 头,网关解析该头部以提取真实 IP。
  • X-Real-IP 方案适用于前置代理负责将真实客户端 IP 写入该头的场景,但不同上游代理的实现行为存在差异。
  • X-Forwarded-For 方案适用于多级 HTTP 代理链路,每经过一个代理节点,该节点将入站 IP 追加至 X-Forwarded-For 头末尾。
  • 自定义头方案允许运维人员指定任意 HTTP 头字段名称作为真实 IP 来源,适用于内部系统已有私有 IP 传递规范的场景。
  • 在 OpenResty Edge 中,必须在端口级别启用 proxy protocol 支持,并在全局配置中选择实际使用的方案。
  • 配置可信来源 IP 列表,以确保只有来自可信地址的请求头中的真实 IP 会被采信并更新 client-addr。
  • 通过 curl 等工具可以验证不同方案的效果,确保真实 IP 的传递和还原正确。
  • OpenResty Edge 还支持在回源请求中通过自定义请求头将真实客户端 IP 透传给后端服务器。

延伸问答

OpenResty Edge 如何处理客户端真实 IP 的传递?

OpenResty Edge 支持四种方案:Proxy Protocol、X-Forwarded-For、X-Real-IP 和自定义头,适用于不同的代理拓扑和协议层。

Proxy Protocol 的工作原理是什么?

Proxy Protocol 在建立 TCP 连接时注入一行标准化的 PROXY 头,网关解析该头部以提取真实 IP。

X-Forwarded-For 方案适用于哪些场景?

X-Forwarded-For 适用于多级 HTTP 代理链路,每经过一个代理节点,该节点将入站 IP 追加至该头末尾。

如何在 OpenResty Edge 中配置可信来源 IP 列表?

在 Global Config 页面中输入前置代理服务器的 IP 地址,只有在此列表中的 IP 才会被采信并更新 client-addr。

使用 curl 如何验证不同的 IP 传递方案?

可以通过 curl 携带不同的头部,如 X-Forwarded-For、X-Real-IP 等,来验证真实 IP 的传递和还原是否正确。

自定义头方案的适用场景是什么?

自定义头方案适用于内部系统已有私有 IP 传递规范的场景,允许运维人员指定任意 HTTP 头字段名称作为真实 IP 来源。

➡️

继续阅读