Nginx 反向代理配置教程
Nginx 不仅可以作为静态网站服务器,还经常用来做反向代理。通过反向代理,可以把用户访问的域名请求转发到后端程序,例如 Node.js、Java、Python、Go、Docker 容器等服务。
本文介绍 Nginx 反向代理的基础配置方法。
一、什么是反向代理
简单理解:
用户访问域名 → Nginx 接收请求 → Nginx 转发给后端服务 → 后端返回结果 → Nginx 返回给用户
比如后端程序运行在:
127.0.0.1:3000
用户访问:
https://example.com
Nginx 可以把请求转发到本机的 3000 端口。
二、适用场景
反向代理常用于:
Node.js 网站部署
Java Spring Boot 项目部署
Python Flask / Django 项目部署
Docker 容器服务访问
前后端分离项目
API 网关
隐藏真实后端端口
统一配置 HTTPS
三、安装 Nginx
Ubuntu / Debian:
apt update
apt install nginx -y
CentOS / Rocky Linux:
yum install nginx -y
启动 Nginx:
systemctl enable nginx
systemctl start nginx
查看状态:
systemctl status nginx
四、准备后端服务
假设后端服务运行在:
127.0.0.1:3000
可以在服务器上测试:
curl http://127.0.0.1:3000
如果能返回内容,说明后端服务正常。
五、配置 Nginx 反向代理
新建配置文件:
vim /etc/nginx/conf.d/example.com.conf
写入:
server {
listen 80;
server_name example.com www.example.com;
location / {
proxy_pass http://127.0.0.1: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;
}
}
保存后检查配置:
nginx -t
如果显示 successful,重载 Nginx:
systemctl reload nginx
六、配置 HTTPS
可以使用 Certbot 申请免费 SSL 证书。
Ubuntu / Debian:
apt install certbot python3-certbot-nginx -y
申请证书:
certbot --nginx -d example.com -d www.example.com
按提示操作后,Certbot 会自动修改 Nginx 配置并启用 HTTPS。
七、WebSocket 反向代理配置
如果后端使用 WebSocket,需要增加:
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
完整示例:
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
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 容器
如果 Docker 容器映射到宿主机端口,例如:
宿主机 8080 → 容器 80
Nginx 可以这样代理:
location / {
proxy_pass http://127.0.0.1:8080;
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;
}
九、常见错误
1. 502 Bad Gateway
常见原因:
后端服务没启动
后端端口写错
proxy_pass 地址错误
防火墙阻止本地端口
后端程序崩溃
可以先在服务器执行:
curl http://127.0.0.1:3000
如果本机都访问不了,Nginx 也代理不了。
2. 域名访问到默认页面
可能原因:
server_name 写错
配置文件没加载
Nginx 没有 reload
DNS 没解析到服务器
检查配置:
nginx -T | grep server_name
3. HTTPS 跳转异常
如果后端程序需要识别 HTTPS,要确保传递:
proxy_set_header X-Forwarded-Proto $scheme;
十、安全建议
后端服务尽量只监听 127.0.0.1
不要把后端端口直接暴露公网
配置 HTTPS
限制后台路径访问
设置合理的上传大小限制
定期检查 Nginx 日志
访问日志:
/var/log/nginx/access.log
错误日志:
/var/log/nginx/error.log
总结
Nginx 反向代理的核心配置是:
proxy_pass http://127.0.0.1:端口;
只要后端服务正常运行,Nginx 配置正确,并且域名解析到服务器,就可以通过域名访问后端应用。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END








暂无评论内容