NGINX获取客户端真实IP地址的配置指南
创作时间:
作者:
@小白创作中心
NGINX获取客户端真实IP地址的配置指南
引用
1
来源
1.
https://www.alibabacloud.com/help/zh/edge-security-acceleration/esa/user-guide/nginx-obtains-the-real-ip-address-of-the-client
在使用NGINX作为反向代理时,获取客户端的真实IP地址是一个常见的需求。本文将详细介绍如何在NGINX中配置Proxy Protocol,以确保后端服务能够正确获取客户端的真实IP地址。
使用场景
您运营一个电子商务网站,后端服务使用TCP协议。为了进行访问控制、日志记录和地理定位等业务判断,您需要在源站服务器内获取客户端的真实IP地址。NGINX已经支持Proxy Protocol,但您的应用程序需要直接解析Proxy Protocol头以获取客户端真实IP。
前提条件
- NGINX Plus R3及更高版本或 Nginx Open Source 1.5.12及更高版本支持 proxy protocol v1。
- NGINX Plus R16及更高版本或 Nginx Open Source 1.13.11及更高版本支持 proxy protocol v2。
安装NGINX
# 安装nginx编译环境依赖
yum -y install gcc gcc-c++ autoconf automake
yum -y install zlib zlib-devel openssl openssl-devel pcre-devel
# 下载安装包
wget http://nginx.org/download/nginx-1.20.0.tar.gz
# 解压源码包
tar -zxvf nginx-1.20.0.tar.gz
# 进入目录
cd nginx-1.20.0
# 设置nginx编译安装配置,带上--with-stream
./configure --prefix=/usr/local/nginx --sbin-path=/usr/local/nginx/sbin/nginx --conf-path=/usr/local/nginx/conf/nginx.conf --with-http_stub_status_module --with-http_gzip_static_module --with-stream
# 编译
make
# 安装
make install
配置NGINX支持 proxy protocol v1/v2
步骤1:修改配置文件
配置NGINX支持 proxy protocol,只需要将参数 proxy_protocol 添加在 server 块中的 listen 指令后,详情请参考Accepting the PROXY Protocol。例如:
http {
log_format combined '$proxy_protocol_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent"';
#...
server {
server_name localhost;
listen 80 proxy_protocol;
listen 443 ssl proxy_protocol;
ssl_certificate /etc/nginx/ssl/public.example.com.pem;
ssl_certificate_key /etc/nginx/ssl/public.example.com.key;
location /app/ {
proxy_pass http://backend1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $proxy_protocol_addr;
proxy_set_header X-Forwarded-For $proxy_protocol_addr;
}
}
}
stream {
log_format basic '$proxy_protocol_addr - $remote_user [$time_local] '
'$protocol $status $bytes_sent $bytes_received '
'$session_time';
#...
server {
listen 8080 ssl proxy_protocol;
ssl_certificate /etc/nginx/ssl/cert.pem;
ssl_certificate_key /etc/nginx/ssl/cert.key;
proxy_pass esa.example.com:8080;
proxy_protocol on;
}
}
步骤2:创建四层代理应用
在ESA控制台,选择四层代理,创建四层代理应用,填入对应的参数。选择业务需要的 proxy protocol v1、proxy protocol v2 代理。
测试和验证
- 快速搭建一个HTTP服务,提供一个文件浏览的Web服务。
python -m SimpleHTTPServer 8080
- 使用Curl 请求来模拟 TCP 请求。
curl -i "https://esa.example.com:8080"
- 查看NGINX服务器日志,即可获取到客户端的真实IP地址。
说明
HAProxy对PP的应用支持请参考HAProxy Proxy Protocol
热门推荐
安徽合肥二十个旅游景点详细攻略
如何评估二手房的合理价格?这种估价方法有哪些优缺点?
上海公交适老化改造:让老年乘客出行省心又省力
中建7局、中铁7局、华北石油局、水电11局…原来郑州央企那么多!
新股中签的机制是怎样的?这个机制对投资者有何影响?
Excel中补充缺失内容的10种实用方法
什麼是皮膚癌手術中的皮瓣技術?
CAD软件中绘制攒尖屋顶的入门指南
五个方面选择耐高温润滑油脂
国际药闻:十个你需要知道的关于抗抑郁药的重点
医生提醒:脖子出现这5种变化,可能是疾病信号
物联网灯照明节能改造方案的经济效益
(宋)朱熹 集注《宋本周易》(《国家珍贵古籍丛刊》之一种)出版
玉鸳鸯的寓意和象征
透明聚酰亚胺PI薄膜,在各个应用领域的具体优势是啥?
股票减仓的原因和策略是什么?股票减仓操作会带来哪些后果?
外贸 vs 跨境电商:两种国际贸易模式的全面对比分析
做放疗,“躺平”就可以了吗?
日本齿科专家详解:正确刷牙指南及牙周病的科学预防
自动驾驶系列—揭秘毫米波雷达:自动驾驶的眼睛如何看穿复杂环境?
特征工程——相关性分析(皮尔逊和斯皮尔曼)
使用权资产在企业所得税税前应该如何调整?
詹姆斯·冈恩“科幻之路”系列打破了四种界限
风景园林(景观设计)的研究方向
消费者摔伤无法观看演唱会 大麦网退票为何这么难?
个人征信报告:透视你的信用“成绩单”
算法详解:树形DP中的树的重心求解
种植牙的部件有哪些?它们的功能和作用是什么?
2025北京清明节赏花热门活动全攻略
资源分配图(RAG)检测死锁算法实现