tencent cloud

边缘安全加速平台 EO

动态与公告
产品动态
安全公告
产品公告
产品简介
产品概述
产品优势
应用场景
EdgeOne 与 CDN 等产品功能对比
使用限制
购买指南
试用套餐体验权益说明
免费版套餐使用说明
计费概述
计费项目
购买指引
续费指引
欠费与退款说明
套餐选型对比
关于“干净流量”计费说明
DDoS 防护容量说明
快速入门
选择业务场景
快速接入网站安全加速
通过 Pages 快速部署网站
域名服务与源站配置
域名服务
HTTPS 证书
源站配置
站点加速
概述
访问控制
智能加速
缓存配置
文件优化
网络优化
URL 重写
修改头部
修改应答内容
规则引擎
图片与视频处理
单连接下载限速
DDoS 与 Web 防护
概述
DDoS 防护
Web 防护
Bot 管理
API 资产识别(Beta)
边缘函数
概述
快速指引
操作指引
Runtime APIs
示例函数
实践教程
Pages
四层代理
概述
新建四层代理实例
修改四层代理实例配置
停用/删除四层代理实例
批量配置转发规则
获取客户端真实IP
数据分析与日志服务
日志服务
数据分析
告警服务
站点与计费管理
计费管理
站点管理
版本管理
通用策略
通用参考
配置语法
请求与响应行为
国家/地区及对应代码枚举
Terraform
Terraform 简介
安装和配置 Terraform
实践教程
自动预热/清除缓存
防盗刷/盗链实践
HTTPS 相关实践
加速优化
流量调度
数据分析与告警
第三方日志平台集成实践
对象存储类源站(例如:COS)配置实践
跨域响应配置
API 文档
History
Introduction
API Category
Making API Requests
Site APIs
Acceleration Domain Management APIs
Site Acceleration Configuration APIs
Edge Function APIs
Alias Domain APIs
Security Configuration APIs
Layer 4 Application Proxy APIs
Content Management APIs
Data Analysis APIs
Log Service APIs
Billing APIs
Certificate APIs
Origin Protection APIs
Load Balancing APIs
Diagnostic Tool APIs
Custom Response Page APIs
API Security APIs
DNS Record APIs
Content Identifier APIs
Legacy APIs
Ownership APIs
Image and Video Processing APIs
Multi-Channel Security Gateway APIs
Version Management APIs
Data Types
Error Codes
常见问题
产品特性相关问题
DNS 记录相关问题
域名配置相关问题
站点加速相关问题
数据与日志相关问题
安全防护相关问题
源站配置相关问题
排障指南
异常状态码参考
EdgeOne 4XX/5XX 状态码排障指南
520/524状态码排障指南
521/522 状态码排障指南
工具指南
相关协议
Service Level Agreement
源站防护启用特别约定
TEO 政策
隐私协议
数据处理和安全协议
联系我们
词汇表

方式一:通过 Nginx 获取客户端真实 IP

PDF
聚焦模式
字号
最后更新时间: 2024-12-25 16:21:32

使用场景

如果您的源站服务为 TCP 协议,且当前 Nginx 已原生支持 Proxy Protocol 协议,建议在业务服务器前增加已支持 Proxy Protocol V1/V2 协议的 Nginx 服务器,以获取客户端真实 IP。您可以参考以下步骤来进行操作。
说明:
四层代理仅企业版套餐可用。
如果您当前源站服务为 TCP 协议,但是不希望部署 Nginx 服务来单独解析客户端真实 IP,希望在业务服务器内直接解析获取客户端真实 IP 以辅助业务判断逻辑,您可以参考:在业务服务器解析客户端真实 IP

部署方式




如上图所示,您需要在业务服务器前部署 Nginx 服务器,由 Nginx 服务器来完成 Proxy Protocol 字段的卸载,对真实客户端的 IP 地址收集可以通过在 Nginx 服务器上分析 Nginx 日志来完成,而业务服务器不用去关心真实客户端地址。此时,在 EdgeOne 四层代理服务中配置源站地址时,可将源站地址指向该 Nginx 服务即可。

操作步骤

步骤一:部署 Nginx 服务

请根据您所需使用的 Proxy Protocol 协议版本,选择对应的 Nginx 版本进行部署:
支持 Proxy Protocol V1:Nginx Plus R11 及以后,Nginx Open Source 1.11.4及以后。
支持 Proxy Protocol V2:Nginx Plus R16 及以后,Nginx Open Source 1.13.11及以后。
如需了解其他 Nginx 版本对 Proxy Protocol 协议的支持,请参考 Nginx 文档:Accepting the PROXY Protocol
为了在 Nginx 上启用四层代理服务,您需要安装 Nginx-1.18.0 版本及其 stream 模块。以下是安装步骤:
# 安装nginx编译环境依赖
yum -y install gcc gcc-c++ autoconf automake
yum -y install zlib zlib-devel openssl openssl-devel pcre-devel

# 解压源码包
tar -zxvf nginx-1.18.0.tar.gz
# 进入目录
cd nginx-1.18.0
# 设置nginx编译安装配置,带上--with-stream
./configure --prefix=/opt/nginx --sbin-path=/opt/nginx/sbin/nginx --conf-path=/opt/nginx/conf/nginx.conf --with-http_stub_status_module --with-http_gzip_static_module --with-stream
# 编译
make
# 安装
make install

步骤二:配置 Nginx 内 Stream 模块

以 Nginx-1.18.0版本为例,可以执行以下命令来打开 Nginx 的配置文件 nginx.conf:
vi /opt/nginx/conf/nginx.conf
Stream 模块配置内容参考如下:
stream {
# 设置日志格式,其中proxy_protocol_addr为解析PP协议拿到的客户端地址, remote_addr为上一跳的地址
log_format basic '$proxy_protocol_addr -$remote_addr [$time_local] '
'$protocol $bytes_sent $bytes_received '
'$session_time';

access_log logs/stream.access.log basic;
# upstream配置
upstream RealServer {
hash $remote_addr consistent;
# 其中127.0.0.1:8888为业务服务器的地址和端口
server 127.0.0.1:8888 max_fails=3 fail_timeout=30s;
}
# server配置
server{
# 四层监听端口,对应着四层代理配置的源站端口,需配置proxy_protocol支持对入包的PP协议解析
listen 10000 proxy_protocol;
proxy_connect_timeout 1s;
proxy_timeout 3s;
proxy_pass RealServer;
}
}

步骤三:配置四层代理转发规则

配置完 Nginx 服务后,您可以前往控制台的四层代理服务,修改四层代理转发规则。将源站地址修改为当前 Nginx 服务的 IP,源站端口为 步骤二 内配置的四层监听端口。传递客户端 IP 时,根据您当前使用的 Nginx 版本支持情况,选择 Proxy Protocol V1 或 Proxy Protocol V2。




步骤四:模拟客户端请求,验证结果

可以通过搭建 TCP 服务,然后使用另一台服务器模拟客户端请求进行验证。具体示例如下:
1. 可以使用 Python 在当前服务器上创建一个 HTTP 服务,来模拟 TCP 服务。
# 基于python2
python2 -m SimpleHTTPServer 8888

# 基于python3
python3 -m http.server 8888
2. 用另一台服务器充当客户端,构造客户端请求,以 Curl 请求来模拟 TCP 请求:
# 利用curl发起http请求, 其中域名为四层代理域名,8888为四层代理转发端口
curl -i "http://d42f15b7a9b47488.davidjli.xyz.acc.edgeonedy1.com:8888/"
3. 在 Nginx 服务器上查看 Nginx 日志,如下展示:



您可以在 Nginx 服务器上进行抓包,并通过 Wireshark 分析数据包。在 TCP 握手完成后,第一个业务数据包的前面会添加 Proxy Protocol 字段。下面是 Proxy Protocol V1 版本的示例:①四层代理出口 IP、②Nginx 服务器 IP、③协议版本、④真实客户端 IP 地址。



帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈