很多站长把网站部署上线之后,第一件事就是装宝塔或者 Nginx,把站点跑起来就完事了。可等到网站多了、应用多了,一台 VPS 上既要跑博客、又要跑 API、还要跑个图床,80 和 443 端口就打架了,不同应用域名不同,配置也越堆越乱。其实大部分问题,一个 Nginx 反向代理就能解决:对外只暴露 80/443,内部按域名把请求转发给不同端口上的应用,顺带还能统一上 HTTPS、做负载均衡。这篇文章不聊虚的,就按真实操作顺序,从安装配置讲起,把反向代理、HTTPS 落地、负载均衡一次讲清。
一、为什么需要反向代理
先搞清楚概念。正向代理是客户端用的,帮你访问外网;反向代理是服务器端的,用户访问你的域名,Nginx 在中间接住请求,再转发给内部真正的服务。打个比方:公司前台就是反向代理,访客要找谁,前台帮你转接到对应工位,访客不用知道每个员工坐在哪。
在 VPS 上,反向代理最常见的三个用处:一是端口统一,所有网站都走 80/443,内部应用随便用什么端口;二是统一 HTTPS,证书只需在 Nginx 上配一份;三是负载均衡,一台后端扛不住时,把请求分发到多台机器上。
二、安装 Nginx
以 Debian/Ubuntu 为例,一条命令装好:
apt update && apt install -y nginx
装完确认状态:
systemctl status nginx
看到 active (running) 就说明起来了。默认站点在 /etc/nginx/sites-available 和 sites-enabled 两个目录里管理,前者放配置,后者放启用链接。
三、配置第一个反向代理
假设你的网站跑在本机 8080 端口,现在要让它通过域名 www.example.com 对外提供服务。在 sites-available 里新建配置文件:
vim /etc/nginx/sites-available/www.example.com
写入以下内容:
server {
listen 80;
server_name www.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;
}
}然后建立软链接启用,并重载配置:
ln -s /etc/nginx/sites-available/www.example.com /etc/nginx/sites-enabled/ nginx -t systemctl reload nginx
nginx -t 是语法检查,必须过了再 reload,否则配置写错会把整个 Nginx 搞挂。这样访问 www.example.com 就会转发到 127.0.0.1:8080,反向代理就跑通了。
四、统一 HTTPS
裸 HTTP 访问既不安全又影响体验,配合 Let's Encrypt 免费证书,几行命令搞定。安装 Certbot:
apt install -y certbot python3-certbot-nginx certbot --nginx -d www.example.com
Certbot 会自动检测 Nginx 配置、申请证书、改好配置,并且自动配置续期。以后证书到期前会自动更新,基本不用再管。到这里,域名就完成了 HTTP 到 HTTPS 的升级。
五、负载均衡实战
网站流量上来之后,一台后端扛不住,就可以加一台机器做负载均衡。Nginx 里用 upstream 定义一组后端服务器:
upstream backend {
server 10.0.0.2:8080 weight=3;
server 10.0.0.3:8080 weight=1;
}
server {
listen 80;
server_name www.example.com;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
}
}weight 是权重,weight=3 表示这台机器承担 3 份流量、另一台承担 1 份。默认是轮询,也可以用 ip_hash 让同一个 IP 的请求固定落在同一台后端,方便做会话保持。
六、常见坑与排查
1. 502 Bad Gateway:后端服务没启动,或者 proxy_pass 的端口写错了。
2. 拿不到真实用户 IP:一定要传 X-Real-IP 和 X-Forwarded-For 头,否则后端日志里全是 127.0.0.1。
3. 改了配置没生效:先 nginx -t 再 systemctl reload nginx,两步缺一不可。
4. 证书续期失败:确认 80 端口没有被防火墙挡住,Certbot 续期要验证 80 端口。
七、总结
反向代理是 VPS 运维里性价比极高的技能:一个 Nginx,就能把端口统一、HTTPS、负载均衡一次搞定,配合免费的 Let's Encrypt 证书,个人站长的访问入口基本可以做到零成本高可用。建议所有站长都把自己的站点收敛到 Nginx 反代后面,后续加应用、加机器都方便。有条件的再配合 CDN,访问体验会更好。