Docker Nginx SSL反向代理配置问题:将t2.l.com指向Ghost容器
解决t2.l.com通过SSL访问Ghost博客的Nginx配置方案
看起来你现在的核心困扰是没法让t2.l.com既通过SSL加密访问(显示绿色安全锁),又正确反向代理到Ghost容器对吧?其实就是Nginx的SSL配置和反向代理的组合逻辑没理顺,我给你一套完整的配置思路和代码示例:
第一步:确认SSL证书路径有效性
首先你已经通过Let's Encrypt拿到了t2.l.com的证书,先确认证书文件路径没问题,通常默认路径是:
- 证书文件:
/etc/letsencrypt/live/t2.l.com/fullchain.pem - 私钥文件:
/etc/letsencrypt/live/t2.l.com/privkey.pem
这个路径和其他正常域名的配置逻辑一致,不用改动。
第二步:配置完整的Nginx规则(HTTP跳转+HTTPS反向代理)
你需要给t2.l.com单独配置两个server块:一个处理80端口的HTTP请求,强制跳转到HTTPS;另一个处理443端口的HTTPS请求,同时反向代理到Ghost容器。
直接用这份配置代码替换你现有相关的配置段:
# 处理HTTP请求,强制跳转至HTTPS server { listen 80; server_name t2.l.com; # 把所有HTTP请求301永久重定向到HTTPS return 301 https://$server_name$request_uri; } # 处理HTTPS请求,反向代理到Ghost容器 server { listen 443 ssl http2; server_name t2.l.com; # 加载Let's Encrypt证书 ssl_certificate /etc/letsencrypt/live/t2.l.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/t2.l.com/privkey.pem; # 可选的SSL安全优化配置(提升加密等级) ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; # 核心反向代理配置 location / { # 替换成你docker-compose中Ghost服务的名称(比如ghost)或容器IP proxy_pass http://ghost:2368; # 必须设置的请求头,确保Ghost识别HTTPS协议 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; } }
第三步:配置后的验证步骤
- 检查Nginx配置语法是否正确:
如果Nginx是运行在容器里,执行docker exec 你的Nginx容器名 nginx -t;如果是宿主机的Nginx,直接执行nginx -t - 重启Nginx生效:
容器环境用docker-compose restart nginx,宿主机用systemctl restart nginx - 访问
https://t2.l.com,应该就能看到带绿色安全锁的Ghost博客了
为什么之前的配置出问题?
你之前只保留proxy_pass时,应该是直接用HTTP访问的t2.l.com,所以没有SSL锁;如果只保留return 301,只会完成跳转但不会代理到Ghost服务。正确的逻辑是拆分两个server块,各司其职:一个负责把HTTP流量强制转成HTTPS,另一个负责处理HTTPS流量并反向代理到Ghost,同时通过X-Forwarded-Proto告诉Ghost当前是HTTPS环境,避免内部跳转或资源加载异常。
内容的提问来源于stack exchange,提问作者alexyichu




