nginx 通过 listen 443 ssl; 启用 https,需在 server 块中配套配置 ssl_certificate、ssl_certificate_key 等参数,且不同域名须分设独立 server 块以支持 sni。

Nginx 没有 listen_ssl 这个独立指令,安全加密监听是通过 listen 指令配合 ssl 参数实现的,必须在 server 块中显式声明,且需配套证书配置才能真正启用 HTTPS。
必须写成 listen 443 ssl; 形式
ssl 是 listen 的一个参数,不是单独指令。只写 listen 443; 是纯 HTTP 监听;加上 ssl 才触发 TLS 握手流程:
-
listen 443 ssl;—— 启用 HTTPS,但缺少证书会启动失败 -
listen [::]:443 ssl http2;—— 支持 IPv6 + HTTPS + HTTP/2 -
listen 192.168.1.100:443 ssl;—— 仅绑定该内网 IP,不响应其他地址
每个 HTTPS server 块必须自包含 SSL 配置
不能依赖全局设置,以下关键项需在同一个 server { } 内完整写出:
-
ssl_certificate和ssl_certificate_key(路径必须可读) -
ssl_protocols TLSv1.2 TLSv1.3;(禁用不安全旧协议) -
ssl_ciphers(推荐使用现代强密码套件,如ECDHE-ECDSA-AES256-GCM-SHA384) -
ssl_prefer_server_ciphers on;(增强协商安全性)
不同域名或用途需分设独立 server 块
即使共用同一端口(如 443),多个站点也不能混在一个块里:
-
server_name api.example.com;和server_name www.example.com;必须各自配独立server { } - SNI(Server Name Indication)机制靠此区分域名并加载对应证书
- 若一个块里漏写
ssl_certificate,该块将无法响应任何 HTTPS 请求
启动前务必验证并开放端口
- 运行
nginx -t确保语法正确、证书路径有效、私钥未加密(或已解密) - Linux 上执行
sudo ufw allow 443或firewall-cmd --add-port=443/tcp --permanent - Windows 需在高级防火墙中为 TCP 443 新建入站规则
注意:监听 443 端口需要 root 权限;普通用户只能监听 ≥1024 的端口(如 8443),此时需同步调整客户端访问地址。











