公司博客 // 2026-05-29 · BY IDCBOT

Nginx反向代理配置教程:一台服务器托管多个应用(含负载均衡)

服务器上跑着WordPress(80)、网盘(8080)、监控面板(3001)、API服务(3000)……难道让用户记住一堆”IP:端口”?反向代理就是解决方案:所有应用藏在内网,Nginx站在门口按域名分发流量,对外只暴露80/443两个端口,还能统一挂SSL。本文用实战配置把这件事讲透。

一、什么是反向代理?一个门卫的比喻

正向代理替”用户”出面访问网站;反向代理替”服务器”接待用户——访客只跟门口的Nginx打交道,Nginx根据请求的域名,把流量转给后端对应的应用。好处立竿见影:端口不裸奔(安全)、域名访问(专业)、SSL统一管理(省心)、后端随便换端口重构(灵活)。

二、实战:三个域名分发三个应用

假设一台香港VPS上跑着博客(127.0.0.1:8080)、网盘(5244)、API(3000)。在 /etc/nginx/conf.d/ 下为每个域名建一个配置:

server {
    listen 80;
    server_name blog.example.com;
    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;
    }
}

网盘、API照抄,只改 server_name 和 proxy_pass 端口。三个域名的A记录都解析到同一个服务器IP,nginx -t 检查语法后 systemctl reload nginx 生效。四行 proxy_set_header 别省——后端应用靠它们拿到真实访客IP与协议。

三、统一上HTTPS

反代架构下SSL只需配在Nginx这一层,后端应用一律走内网HTTP:

certbot --nginx -d blog.example.com -d pan.example.com -d api.example.com

Certbot自动为每个server块签发证书并配置跳转,自动续期。WebSocket应用(如面板实时日志)需在location中追加两行:proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";

四、进阶:负载均衡

单机扛不住时,Nginx还能把流量分发给多台后端:

upstream backend {
    server 10.0.0.2:3000 weight=2;
    server 10.0.0.3:3000;
}
server {
    listen 80;
    server_name api.example.com;
    location / { proxy_pass http://backend; }
}

默认轮询,可加权重(weight)或改 ip_hash 保持会话粘性。前端一台Nginx + 后端多台应用机,就是最经典的横向扩容架构——入口机建议选独享带宽的独立服务器,它是全站流量的咽喉。

五、排错速查

  • 502 Bad Gateway:后端没起来或端口写错,ss -tlnp 核对;
  • 拿到的访客IP全是127.0.0.1:漏了X-Real-IP头,或后端未配置信任代理;
  • 改了配置不生效:先 nginx -t 再 reload,语法错误时reload会被静默拒绝。

掌握反代,一台服务器就是一个整洁的应用集群入口。在免费试用机上把三应用分发实操一遍,这项技能受用整个职业生涯。

// LEAVE A COMMENT

Your email address will not be published. Required fields are marked *