Docker部署Nginx反向代理:零基础手把手操作指南
你需要准备什么
开始之前,请确保你的服务器或电脑上已经安装了 Docker(如何安装 Docker 不在此文展开,但你可以通过 docker --version 检查)。
另外,你需要一个可访问的域名(可选,如果没有,可以用 IP + 端口测试),以及你想要代理的一个后端服务(例如运行在 3000 端口的 Node.js 应用)。
理解反向代理:简单说就是 Nginx 作为中间人,接收用户请求,再转发给背后的程序(如 Java、Python、Node.js),用户看不到真实后端,同时还能做负载均衡、缓存、SSL 等。
第一步:拉取 Nginx 镜像并启动容器
打开终端(Linux 或 Mac 使用 Terminal,Windows 使用 PowerShell 或 CMD),执行以下命令拉取 Nginx 的官方镜像:
docker pull nginx:latest拉取成功后,先不急着写配置,我们用最简单的方式启动一个测试容器,验证 Docker 能否跑 Nginx:
docker run -d --name mynginx -p 80:80 nginx:latest参数说明:
-d:后台运行--name mynginx:给容器命名-p 80:80:将宿主机的 80 端口映射到容器内的 80 端口
启动后,在浏览器访问 http://你的服务器IP,如果看到 Welcome to nginx 页面,说明 Nginx 已经跑起来了。
现在可以把测试容器关掉:
docker stop mynginx && docker rm mynginx第二步:创建本地 Nginx 配置文件并挂载
生产环境需要自定义配置,所以我们要把宿主机上的配置文件挂载到容器里。
假设我们打算把配置文件放在 /root/nginx/conf.d 目录。
mkdir -p /root/nginx/conf.d进入该目录,创建一个 reverse-proxy.conf 文件:
cd /root/nginx/conf.d
vim reverse-proxy.conf写入以下基础反向代理配置(请将 yourdomain.com 换成你自己的域名或 IP,将 localhost:3000 换成实际后端地址):
server {
listen 80;
server_name yourdomain.com;
location / {
proxy_pass http://localhost:3000; # 后端服务地址
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
注意事项:
如果后端服务也在同一台机器的 Docker 容器中,localhost 要换成 Docker 容器的名字或 IP(通常用容器互联或 Docker Compose 更方便,
但本文先讲基础)。
第三步:重新启动 Nginx 容器并挂载配置文件
现在启动一个新的 Nginx 容器,把刚才的配置目录挂载进去,并开放 80 端口:
docker run -d --name nginx-proxy \
-p 80:80 \
-v /root/nginx/conf.d:/etc/nginx/conf.d \
nginx:latest启动后,Nginx 会自动读取 /etc/nginx/conf.d/ 下的所有 .conf 文件。如果之前有测试容器,记得先停止删除。
第四步:验证反向代理是否生效
确保你的后端服务已经启动(例如运行在 3000 端口),然后访问 http://yourdomain.com(或直接用服务器 IP)。
如果看到的是后端服务返回的内容,说明反向代理配置成功。
你也可以在服务器本地测试:
curl -I http://localhost正常应该返回 HTTP/1.1 200 OK,且响应头中可能出现 Server: nginx。
常见问题与避坑指南
1. 修改配置文件后如何让 Nginx 重载?
不需要重启整个容器,只需重新加载配置:
docker exec nginx-proxy nginx -s reload2. 容器内无法访问宿主机的 localhost?
如果后端服务在宿主机上(非容器),
请将 proxy_pass 中的 localhost 改为宿主机的内网 IP(如 192.168.1.100),
或者使用特殊 Docker 地址 host.docker.internal(仅限 Windows/Mac Docker Desktop,
Linux 需自行配置网络模式)。
3. 为什么页面显示 502 Bad Gateway?
通常是后端服务没有启动,或者端口映射错误。
检查后端是否监听正确端口,以及 Nginx 配置文件中的 proxy_pass 地址是否可达。
4. 如何添加 HTTPS?
用 Certbot 或 Let's Encrypt 生成证书后,修改配置文件添加 SSL 相关指令,并映射 443 端口。
基础步骤:
- 增加
listen 443 ssl; - 指定
ssl_certificate和ssl_certificate_key路径(需要挂载到容器内)
写在最后
本文演示了通过 Docker 部署 Nginx 反向代理的最基本流程:拉取镜像 → 启动容器 → 挂载配置 → 测试效果。
对于零基础用户,建议先按上述步骤完整操作一次,等掌握后再尝试添加负载均衡、SSL、多站点等高级功能。
遇到问题时优先查看容器日志(docker logs nginx-proxy),大部分报错都能从日志里找到原因。