新手玩 VPS 最常遇到一个问题:买一台服务器,想跑博客、网盘、监控面板好几个服务,但 80 和 443 端口只有一个,怎么办?
答案就是 Nginx 反向代理。一句话解释:Nginx 站在所有服务前面当"门卫",根据来访域名把请求转发到背后不同端口。
基础配置
假设服务器上跑了三个服务:
- 博客:localhost:8080
- NextCloud:localhost:8081
- Uptime Kuma:localhost:3001
对应的 Nginx 配置:
# 博客
server {
listen 80;
server_name blog.zjunwei.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;
}
}
# NextCloud
server {
listen 80;
server_name cloud.zjunwei.com;
client_max_body_size 10G;
location / {
proxy_pass http://127.0.0.1:8081;
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;
}
}关键参数
| 参数 | 作用 |
|---|---|
proxy_pass | 把请求转发到哪个地址 |
proxy_set_header Host | 告诉后端原始域名 |
proxy_set_header X-Real-IP | 告诉后端真实客户端 IP |
proxy_set_header X-Forwarded-Proto | 告诉后端前端是 HTTP 还是 HTTPS |
client_max_body_size | 上传文件大小限制(云盘必设) |
WebSocket 支持
如果后端需要 WebSocket(比如聊天应用、在线终端),加三行:
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";一键重载
改完配置先测试再重载,别直接重启:
nginx -t && nginx -s reload配置错误不会生效,线上服务不受影响。
总结
Nginx 反向代理是自托管玩家的必备技能。三条 proxy_set_header 加一条 proxy_pass,剩下的按域名复制 server 块即可。要加新服务就加一个新 server 块,十分钟搞定。