香港VPS搭建Nginx反向代理:多域名配置与SSL证书申请完整教程

很多人在香港 VPS 上跑了多个项目,但每个项目用不同端口(如 :3000、:8080)访问,既不美观又难记。通过 Nginx 反向代理,你可以让多个域名共享同一台 VPS 的 80/443 端口,同时为每个域名配置独立的免费 SSL 证书,实现专业级的 HTTPS 访问。本教程适合有基本 Linux 命令基础的读者。


一、环境准备

  • 香港 VPS 一台(Ubuntu 22.04 LTS 推荐)
  • 已解析到该 VPS IP 的域名(如 site1.comsite2.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 反向代理的工作原理

反向代理的核心逻辑是:

  1. 用户访问 https://site1.com
  2. Nginx 监听 443 端口,根据域名判断请求属于哪个项目
  3. Nginx 将请求转发到本地对应的端口(如 127.0.0.1:3000
  4. 本地应用处理请求后,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_nameproxy_pass 端口:

sudo nano /etc/nginx/sites-available/site2.com
server {
    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 -y

Step 2:为域名申请证书并自动配置 Nginx

sudo certbot --nginx -d site1.com -d www.site1.com

Certbot 会自动:

  • 向 Let's Encrypt 验证域名所有权(需要域名已解析到该 VPS)
  • 下载 SSL 证书文件
  • 修改 Nginx 配置,添加 443 端口监听和证书路径
  • 将 HTTP 流量自动重定向到 HTTPS

Step 3:为第二个域名申请证书

sudo certbot --nginx -d site2.com -d www.site2.com

Step 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 元/月,支持支付宝付款,查看套餐详情

THE END