Nginx反向代理实操完整配置|站长落地避坑整理
Nginx反向代理全套教程,配置可直接复制部署,附带线上踩坑经验
正向代理和反向代理,简单分清
很多教程概念写得偏理论,上手很容易混淆。
正向代理代理的是客户端,替访问者去请求外部网络资源,普通建站场景很少用到。
反向代理代理后端业务服务。用户访问Nginx,请求由Nginx接收,再转发给后端程序,后端服务器地址对访客不可见,这也是我们建站最常用的模式。
反向代理带来的实际收益:
- 隐藏后端真实IP,减少后端直接暴露公网带来的安全风险
- 多个业务共用80/443端口,依靠域名、URL路径区分业务,不用记忆大量端口
- 多台后端节点做负载均衡,分摊访问压力
- 在代理层统一处理HTTPS、Gzip压缩、限流、缓存,后端业务无需重复开发
Nginx快速安装(CentOS / Ubuntu两套命令)
部署配置前,先完成Nginx安装,两套系统命令分开,直接复制执行。
CentOS/RHEL系列
yum install -y nginx systemctl start nginx systemctl enable nginx
Ubuntu / Debian系列
apt update apt install -y nginx systemctl start nginx systemctl enable nginx
执行完成后,浏览器访问服务器公网IP,出现Nginx默认欢迎页即代表安装正常。
注意:服务器安全组、防火墙需要放行80端口,否则外部无法访问。
配置文件存放位置
不建议直接修改主配置nginx.conf,后期维护、排障麻烦。推荐单独编写业务配置,放在 /etc/nginx/conf.d/*.conf,Nginx会自动加载这个目录下所有conf文件。
- /etc/nginx/nginx.conf:Nginx主配置文件,存放全局参数
- /etc/nginx/conf.d/:业务子配置目录,新建conf文件存放站点代理规则
几种高频反向代理完整配置
①最简单服务反向代理
适合将域名全部流量转发到本机另一个端口,新建配置文件 /etc/nginx/conf.d/proxy.conf。
server {
listen 80;
server_name demo.example.test;
location / {
proxy_pass http://127.0.0.1:8080;
# 这组请求头务必带上,用于获取访客真实IP与主机信息
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;
}
}
逻辑:访客访问 demo.example.test,Nginx接收请求,全部转发至本机127.0.0.1:8080后端服务。
踩坑提示:很多人复制配置时漏掉proxy_set_header这几行,后端日志拿到的全是Nginx本机IP,无法获取用户真实访问IP。
②按路径分发,不同路径交给不同后端
单服务器部署多个业务,依靠URL路径区分转发。重点留意proxy_pass末尾斜杠/,有无斜杠,转发逻辑完全不同,是高频踩坑点。
末尾带/:剥离匹配到的路径前缀再转发;不带/:完整路径一并传给后端。
server {
listen 80;
server_name demo.example.test;
# 主业务前台
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
# 接口服务,访问 /api/xxx,转发后后端拿到 /xxx
location /api/ {
proxy_pass http://127.0.0.1:9090/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
# 后台管理服务
location /admin/ {
proxy_pass http://127.0.0.1:7070/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
③多后端负载均衡配置
访问量上涨,单实例压力过大,配置upstream集群分摊请求。支持权重分配、备用节点,某后端宕机自动切换其他实例。
# 定义后端服务集群组
upstream backend_servers {
server 127.0.0.1:8080;
server 127.0.0.1:8081;
server 127.0.0.1:8082;
# server 127.0.0.1:8083 backup; # backup标记为备用节点,其余全部故障才启用
}
server {
listen 80;
server_name demo.example.test;
location / {
proxy_pass http://backend_servers;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
④WebSocket长连接反向代理
后端业务用到WebSocket长连接通信时,普通代理配置无法维持连接,会频繁断开。需要额外增加Upgrade相关头部配置。
server {
listen 80;
server_name demo.example.test;
location /ws/ {
proxy_pass http://127.0.0.1:8787;
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;
}
}
生产环境可直接落地完整配置
整合前端网页、API接口、WebSocket长连接,增加代理超时参数,正式业务环境修改域名和后端地址即可上线。
upstream api_server {
server 127.0.0.1:9090;
}
upstream web_server {
server 127.0.0.1:80;
}
server {
listen 80;
server_name demo.example.test;
# API接口转发
location /api/ {
proxy_pass http://api_server/;
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_connect_timeout 60s;
proxy_read_timeout 60s;
proxy_send_timeout 60s;
}
# 静态网页前端
location / {
proxy_pass http://web_server;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
# WebSocket服务
location /ws {
proxy_pass http://api_server;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
修改配置后必执行命令
重要提醒:修改Nginx配置,不要直接重启服务。配置语法错误直接重启,会导致Nginx停止,网站全部无法访问。
先校验配置语法,输出test is successful代表配置没问题。
nginx -t
校验通过,平滑重载配置,业务不会中断。
nginx -s reload
需要完整重启服务时执行:
systemctl restart nginx
日常调试常见故障总结
- 返回502 Bad Gateway:后端程序未启动、端口监听地址错误、防火墙阻止Nginx访问后端端口
- 403 /404报错:大多是proxy_pass末尾斜杠/配置出错,路径匹配逻辑异常
- 后端日志拿不到访客真实IP:缺少X‑Real‑IP请求头配置
- 域名访问无效:确认域名DNS解析生效,服务器安全组开放80端口
实操小结:每次调整Nginx代理配置,优先执行nginx -t校验,确认无误再重载。很多线上故障都是跳过校验,写错配置直接重启造成业务断流。
免责声明:本文仅为技术教程演示,所有配置上线前请自行测试验证,本站不对使用该配置产生的任何故障、业务损失承担责任。

















![表情[baoquan]-环球云域CloudIDC](https://cloudidc.vip/wp-content/themes/zibll/img/smilies/baoquan.gif)


暂无评论内容