listen 443 和证书路径都写了,浏览器仍报「不安全」或证书错误——多半不是「再重装一次 Nginx」,而是证书链、域名不匹配、没跳转、或页内混用 HTTP 资源。按下面清单验收。
配置细节笔记见 Nginx 排障索引 · HTTPS。
你遇到的问题
| 现象 | 更可能是 |
|---|---|
| NET::ERR_CERT_COMMON_NAME_INVALID | 证书域名与访问域名不一致 |
| 证书不受信任 | 缺中间证书 / 自签未导入信任 |
| 地址栏仍是 http:// | 未做 80→443 跳转或跳转失败 |
| 锁图标带警告 | 混合内容(HTTPS 页加载 HTTP 图片/脚本) |
2 分钟诊断
# 看握手与证书主体
curl -vI https://你的域名/ 2>&1 | head -80
# 确认 Nginx 已编入 ssl 模块
nginx -V 2>&1 | tr ' ' '\n' | grep ssl
核对:ssl_certificate / ssl_certificate_key 路径、文件权限、server_name 是否覆盖你访问的 Host。
解法
1. 最小 HTTPS server
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /path/to/fullchain.pem; # 含中间证书
ssl_certificate_key /path/to/privkey.pem;
}
自签仅用于内测;对外用 Let’s Encrypt 或云厂商证书,并使用 fullchain。
2. HTTP 跳转 HTTPS
server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri;
}
3. 混合内容
页面、API、资源 URL 一律 https;检查 HTML 里硬编码的 http://。
4. 改完必做
nginx -t && nginx -s reload
如何验证
- 浏览器无证书警告(或内测自签已手动信任)
-
curl -I http://域名返回 301 到 https - 控制台无 mixed content
- 证书 SAN/CN 覆盖实际访问域名(含 www)
下一步
- 生产环境打开较稳妥的协议与套件(按当前 Nginx/OpenSSL 文档)。
- 静态与网关性能回到 静态资源排查。
- 完整模块笔记仍在索引长文中检索。
相关文章
浏览全部 →HTML/JS/图片经 Nginx 很慢时:先确认是否走静态 location,再打开 sendfile、压缩与缓存头,最后才上 CDN。
3 分钟
504/静态慢/HTTPS/限流访问控制卡住时:先用故障索引定位章节,再按配置与验证步骤处理;下文保留可检索的实操笔记。
29 分钟
接口偶发 504/502、后端其实还在算时:用 proxy_read_timeout 对齐等待上限,并验证是超时还是上游挂了。
4 分钟
18 分钟