香港VPS搭建Nginx反向代理:多域名配置与SSL证书申请完整教程
很多人在香港 VPS 上跑了多个项目,但每个项目用不同端口(如 :3000、:8080)访问,既不美观又难记。通过 Nginx 反向代理,你可以让多个域名共享同一台 VPS 的 80/443 端口,同时为每个域名配置独立的免费 SSL 证书,实现专业级的 HTTPS 访问。本教程适合有基本 Linux 命令基础的读者。
一、环境准备
- 香港 VPS 一台(Ubuntu 22.04 LTS 推荐)
- 已解析到该 VPS IP 的域名(如
site1.com、site2.com) - 具备 sudo 权限的 SSH 用户
确认 VPS 上没有其他程序占用 80/443 端口:
sudo ss -tlnp | grep -E ':80|:443'如果有输出,需要先停止占用端口的服务。
二、安装 Nginx
sudo apt update
sudo apt install nginx -y
sudo systemctl enable nginx
sudo systemctl start nginx安装完成后,访问你的 VPS IP,能看到 Nginx 欢迎页说明安装成功。
三、理解 Nginx 反向代理的工作原理
反向代理的核心逻辑是:
- 用户访问
https://site1.com - Nginx 监听 443 端口,根据域名判断请求属于哪个项目
- Nginx 将请求转发到本地对应的端口(如
127.0.0.1:3000) - 本地应用处理请求后,Nginx 将响应返回给用户
整个过程对用户透明,用户只看到域名,看不到内部端口。
四、创建第一个站点的 Nginx 配置文件
Nginx 的站点配置文件存放在 /etc/nginx/sites-available/ 目录。为每个域名创建独立的配置文件是最佳实践。
sudo nano /etc/nginx/sites-available/site1.com写入以下内容(先配置 HTTP,后续再升级 HTTPS):
server {
listen 80;
server_name site1.com www.site1.com;
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;
proxy_cache_bypass $http_upgrade;
}
}启用该站点配置(创建软链接):
sudo ln -s /etc/nginx/sites-available/site1.com /etc/nginx/sites-enabled/
sudo nginx -t # 检查配置语法
sudo systemctl reload nginx五、配置第二个域名(多域名核心)
多域名配置与第一个完全相同,只需修改 server_name 和 proxy_pass 端口:
sudo nano /etc/nginx/sites-available/site2.comserver {
listen 80;
server_name site2.com www.site2.com;
location / {
proxy_pass http://127.0.0.1:4000; # 指向第二个应用的端口
proxy_http_version 1.1;
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;
}
}sudo ln -s /etc/nginx/sites-available/site2.com /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx按此方式,一台香港 VPS 可以同时托管数十个不同域名的网站,只需保证各应用使用不同本地端口即可。
六、申请 Let's Encrypt 免费 SSL 证书
使用 Certbot 工具可以一键申请并配置 Let's Encrypt 证书,完全免费,有效期 90 天,支持自动续期。
Step 1:安装 Certbot
sudo apt install certbot python3-certbot-nginx -yStep 2:为域名申请证书并自动配置 Nginx
sudo certbot --nginx -d site1.com -d www.site1.comCertbot 会自动:
- 向 Let's Encrypt 验证域名所有权(需要域名已解析到该 VPS)
- 下载 SSL 证书文件
- 修改 Nginx 配置,添加 443 端口监听和证书路径
- 将 HTTP 流量自动重定向到 HTTPS
Step 3:为第二个域名申请证书
sudo certbot --nginx -d site2.com -d www.site2.comStep 4:验证自动续期是否配置成功
sudo certbot renew --dry-run看到 Congratulations, all simulated renewals succeeded 说明自动续期已配置好,无需手动干预。
七、配置后的 HTTPS 版 Nginx 配置示例
Certbot 自动修改后,你的 site1.com 配置文件大致如下:
server {
listen 80;
server_name site1.com www.site1.com;
return 301 https://$host$request_uri; # HTTP 强制跳转 HTTPS
}
server {
listen 443 ssl;
server_name site1.com www.site1.com;
ssl_certificate /etc/letsencrypt/live/site1.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/site1.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
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;
}
}八、常见问题排查
问题一:申请证书时提示域名验证失败
原因:域名 DNS 未解析到 VPS IP,或解析尚未生效(通常需要 5~30 分钟)。检查方法:
ping site1.com # 看返回的 IP 是否是你的 VPS IP问题二:Nginx 重载后提示 80 端口被占用
常见原因是系统预装了 Apache,与 Nginx 冲突:
sudo systemctl stop apache2
sudo systemctl disable apache2问题三:反向代理后应用获取不到真实 IP
确保 Nginx 配置中包含以下 header 传递:
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;应用代码中读取 X-Forwarded-For 头而非直接读取 REMOTE_ADDR。
九、性能优化建议
- 开启 Gzip 压缩:在
/etc/nginx/nginx.conf中启用gzip on;,可减少 60~80% 的文本内容传输量 - 配置浏览器缓存:对静态文件(图片、CSS、JS)设置
expires 30d;,减少重复请求 - 启用 HTTP/2:在
listen 443 ssl;改为listen 443 ssl http2;,提升并发加载效率 - 限制请求速率:使用
limit_req_zone防止爬虫和 CC 攻击占用资源
总结
通过 Nginx 反向代理 + Let's Encrypt SSL,你可以在一台香港 VPS 上以最低成本托管多个 HTTPS 网站,每个域名独立配置,互不干扰。整个配置流程通常在 30~60 分钟内完成,是出海建站运维的必备技能。
如果你还没有香港 VPS,后浪云提供 CN2 GIA 优质线路,最低 10 元/月,支持支付宝付款,查看套餐详情。
