Nginx 反向代理和 HTTPS 跳转配置笔记

Nginx 反向代理和 HTTPS 跳转配置笔记

前阵子我想在博客旁边再挂个小服务(就是上一篇里提到的 Uptime Kuma),Nginx 配置写了半天:http 能打开,https 报证书错;修好证书,后端又说收到的全是 http 请求,页面里的跳转全乱套。我对着配置文件发呆了二十分钟,感觉跟看 HOA 的规章手册一样头大。 这篇的起因就是想给 Uptime Kuma 一个体面的域名,它是我 2核2G 机器上跑的三个轻量服务之一,清单记在另一篇里。 冷静下来,把配置一段段拆开看,才发现全是小问题。这篇笔记就是把那次的配置掰开揉碎,逐段解释清楚。 第一段:HTTP 跳 HTTPS,每个域名都要有 server { listen 80; server_name opusmia.com www.opusmia.com; return 301 https://$host$request_uri; } 这是最简单的一个 server 块,干一件事:所有走 80 端口(HTTP)来的请求,301 永久重定向到 HTTPS。$host 是用户访问的域名,$request_uri 是后面的路径,拼起来就是"原样跳到 https 版本"。 为什么每个域名都要写?因为 certbot 当初 --nginx 时只给我主域名配了跳转,www 的 80 端口没人管。有段时间 http://www.opusmia.com 打开是 Nginx 默认页,尴尬。检查方法很简单: curl -I http://www.opusmia.com 看返回是不是 301 和 Location: https://...。不是,就把这个 server 块补上。 第二段:反向代理,把请求转发给后端服务 Uptime Kuma 跑在服务器本机的 3001 端口,我不想让访客记 http://我的VPS:3001 这种地址,就用 Nginx 反向代理,给它一个体面的域名: server { listen 443 ssl; server_name status.opusmia.com; ssl_certificate /etc/letsencrypt/live/status.opusmia.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/status.opusmia.com/privkey.pem; location / { proxy_pass http://127.0.0.1:3001; 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; } } 逐段说。listen 443 ssl 是 HTTPS 端口,ssl_certificate 两行是证书路径——子域名要单独申请证书,certbot --nginx -d status.opusmia.com 再跑一次就行,流程跟主域名一模一样。 ...

October 29, 2026 · 2 min · 298 words