You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 03:25:57