nginx对代理IP进行白名单配置,主要解决请求的IP都是代理IP,无法进行白名单过滤
有时在配置白名单不生效的情况,实际因为请求的都是IP都是代理IP。
访问服务器的 IP(例如 192.168.1.100)是一个代理 IP,需要通过这个代理 IP 访问的真实客户端 IP(即代理后面的 IP)进行白名单限制。这通常涉及反向代理场景,真实客户端 IP 通常会通过 HTTP 头(如 X-Forwarded-For)传递过来。
在这种情况下,Nginx 需要从代理传来的请求头中提取真实客户端 IP,然后基于这个 IP 进行白名单限制。以下是具体实现方案:
前提
- 代理服务器(192.168.1.100)会在请求中添加 X-Forwarded-For 头,包含真实客户端 IP。
- 如果代理没有添加这个头,你需要确保代理正确配置。
1、使用 real_ip 模块提取真实 IP
Nginx 的 ngx_http_realip_module 可以从请求头中提取真实客户端 IP。你需要确保 Nginx 编译时包含了这个模块(大多数发行版默认包含)。
2、编辑 Nginx 配置文件
nginx.conf
http {
# 定义信任的代理 IP(即 192.168.1.100)
set_real_ip_from 192.168.1.100;
# 可定义多个IP
set_real_ip_from 192.168.2.100
# 从 X-Forwarded-For 头中提取真实 IP
real_ip_header X-Forwarded-For;
server {
listen 80;
server_name yourdomain.com;
location / {
# 白名单:只允许特定真实客户端 IP 或网段
allow 10.0.0.0/16; # 示例:允许 10.0.0.0 - 10.0.255.255
allow 172.16.0.0/12; # 示例:允许 172.16.0.0 - 172.31.255.255
# 拒绝所有其他 IP
deny all;
# 其他配置
root /var/www/html;
index index.html;
}
}
}
3、重启进行测试,是否白名单生效
nginx -t
nginx -s reload
- 发送测试请求:
curl -H "X-Forwarded-For: 10.0.0.10" --interface 192.168.1.100 http://yourdomain.com
4、工作原理
- set_real_ip_from 192.168.1.100;:告诉 Nginx,来自 192.168.1.100 的请求是可信的代理请求。
- real_ip_header X-Forwarded-For;:指示 Nginx 从 X-Forwarded-For 头中提取真实客户端 IP。
- allow 和 deny:基于提取的真实 IP 进行白名单限制。
5、示例请求
- 请求头
X-Forwarded-For: 10.0.0.5, 192.168.1.100 - Nginx 会提取 10.0.0.5 作为真实客户端 IP,并检查它是否在白名单中。
浙公网安备 33010602011771号