无需CloudFront CIDR在Nginx及EC2 Node.js应用中获取客户端IP
方案实现步骤
第一步:CloudFront侧配置自定义校验头
这一步是核心,用于替代CIDR白名单校验,避免客户端伪造转发头:
- 进入CloudFront对应分发的源配置页,选择对接Nginx的源,编辑源请求策略
- 添加自定义源请求头,例如命名为
X-CloudFront-Secret,值设置为仅你知晓的高复杂度随机字符串 - 保存配置等待CloudFront分发生效
第二步:Nginx侧配置获取真实客户端IP
编辑Nginx配置文件(通常为/etc/nginx/nginx.conf或对应站点的独立配置文件):
- 先校验CloudFront传递的自定义秘密头,不匹配直接返回403,拦截伪造请求
- CloudFront会将真实客户端IP放在
X-Forwarded-For请求头的最左侧,后接CloudFront节点IP,直接提取最左侧值即可获得真实客户端IP
配置示例:
http { # 预先定义和CloudFront约定的秘密值 set $cloudfront_secret "替换为你自己设置的随机字符串"; server { listen 80; server_name 替换为你的站点域名; # 校验请求是否来自合法CloudFront if ($http_x_cloudfront_secret != $cloudfront_secret) { return 403; } # 提取真实客户端IP赋值给变量 set $real_client_ip ""; if ($http_x_forwarded_for ~ "^([^,]+),") { set $real_client_ip $1; } # 如需直接覆盖默认remote_addr变量方便日志打印可放开下一行注释 # set $remote_addr $real_client_ip; # 日志配置示例,打印真实客户端IP access_log /var/log/nginx/access.log main; log_format main '$real_client_ip - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent"'; # 转发请求到Node.js应用的配置 location / { proxy_pass http://127.0.0.1:3000; # 替换为你的Node.js服务实际地址 proxy_set_header X-Real-IP $real_client_ip; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $host; } } }
配置完成后执行nginx -t校验语法合法性,校验通过后执行nginx -s reload生效。
第三步:Node.js应用获取真实客户端IP
直接读取Nginx校验后传递的X-Real-IP头即可,不要直接读取原始X-Forwarded-For避免伪造风险:
原生Node.js服务示例
const http = require('http'); const server = http.createServer((req, res) => { const realClientIp = req.headers['x-real-ip']; res.end(`Real client IP: ${realClientIp}`); }); server.listen(3000);
Express框架示例
const express = require('express'); const app = express(); app.get('/', (req, res) => { const realClientIp = req.get('X-Real-IP'); res.send(`Real client IP: ${realClientIp}`); }); app.listen(3000);
Koa框架示例
const Koa = require('koa'); const app = new Koa(); app.use(async ctx => { const realClientIp = ctx.request.headers['x-real-ip']; ctx.body = `Real client IP: ${realClientIp}`; }); app.listen(3000);
内容的提问来源于stack exchange,提问作者Aditya Singh Parmar
相关产品推荐
相关产品推荐

