nginx 反向代理 + HTTPS:从域名到上线全流程

买云服务器、备案、配域名、申请证书、写 nginx 配置,这是一套看起来简单但细节繁多的流程。本文记录我在腾讯云服务器上把 Node 服务从 HTTP 3000 端口搬到 HTTPS 443 端口的完整过程。

1. 购买域名与 DNS 解析

我选了一家国内域名注册商,购买了一个与站点主题相关的域名。拿到域名后,在 DNS 控制台添加一条 A 记录,指向云服务器公网 IP。TTL 我先设为 600 秒,方便调试时快速生效,稳定后再改到 3600 秒。

2. certbot / Let's Encrypt 证书申请与续期

为了省钱,第一阶段用了免费的 Let's Encrypt 证书。在服务器上安装 certbot 后执行 certbot certonly --standalone -d example.com -d www.example.com。注意 certbot standalone 模式会占用 80 端口,所以要先停掉其他服务。证书有效期 90 天,我配了一条 cron 任务每月自动续期。

3. 反代配置逐行解释

nginx 的 server 块监听 443 ssl,证书指向 certbot 生成的路径;location / 块里用 proxy_pass http://127.0.0.1:3000 把请求转给本地 Node 服务。关键是 proxy_set_header Host $host 和 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for,这样后端才能拿到真实域名和客户端 IP。

4. 80 强制跳转 443

监听 80 端口的 server 块里加一行 return 301 https://$host$request_uri,确保所有 HTTP 访问都被重定向到 HTTPS。同时把 HSTS 头加上,告诉浏览器后续一段时间内只走 HTTPS,减少中间人攻击窗口。

5. 502 / 504 的排查思路

502 一般是后端挂了或端口不对,先 curl http://127.0.0.1:3000 确认本地服务正常;504 通常是后端处理太慢,我会看 Node 的 CPU 和事件循环延迟。nginx 的 error.log 和 access.log 结合看,基本能快速定位。

← 返回首页