Docker环境下Next.js搭配Nginx如何获取客户端真实IP
解决Docker化Next.js通过Nginx反向代理获取真实IP的问题
问题原因
你拿到的172.19.0.1是Docker默认桥接网络的网关地址,核心原因是Next.js默认不信任反向代理,无法正确解析Nginx传递的X-Real-IP和X-Forwarded-For头,同时需要确保Nginx配置和Docker网络设置正确传递客户端IP。
修复步骤
1. 配置Next.js信任反向代理
在next.config.mjs中添加信任代理的配置,指定信任Nginx所在的Docker网段(生产环境建议明确指定,而非全局信任):
/** @type {import('next').NextConfig} */ const nextConfig = { trustProxy: "172.19.0.0/16", // 匹配Docker默认桥接网段,也可设为true全局信任 }; export default nextConfig;
同时取消Dockerfile中next.config.mjs的注释,确保配置文件被复制到生产容器:
COPY --from=builder /app/next.config.mjs ./next.config.mjs
2. 优化Nginx配置
更新nginx.conf,确保正确传递客户端IP并启用真实IP解析:
events { worker_connections 1024; } http { # 配置信任Docker网段,解析真实IP set_real_ip_from 172.19.0.0/16; real_ip_header X-Real-IP; real_ip_recursive on; server { listen 80; server_name localhost; location / { proxy_pass http://nextjs:3000; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $host; proxy_set_header X-Forwarded-Proto $scheme; # 保持HTTP连接,避免IP信息丢失 proxy_http_version 1.1; proxy_set_header Connection ""; } } }
3. 重新构建启动服务
执行命令更新容器:
docker-compose down docker-compose build docker-compose up -d
验证方法
- 访问页面查看显示的IP是否为真实客户端IP
- 查看Nginx访问日志,确认
$remote_addr字段是否为真实客户端IP - 检查Next.js服务端日志,确认
x-real-ip和x-forwarded-for头是否正确传递
内容的提问来源于stack exchange,提问作者b.j
相关产品推荐
相关产品推荐

