Nginx 中 SSL 与 HTTP 的核心区别
概念澄清
- HTTP:应用层协议,负责浏览器与服务器之间的明文数据传输。
- SSL/TLS:位于HTTP 与 TCP之间的安全层,提供加密、身份认证、完整性校验。现代系统实际使用的是TLS,但业界仍习惯称为“SSL”。
- HTTPS:即 HTTP over SSL/TLS,在 HTTP 与 TCP 之间加入加密层,通过证书完成服务器(可选客户端)身份验证并建立加密通道。Nginx 既可作为 HTTP 服务器,也可通过模块启用 SSL/TLS 提供 HTTPS 服务。
关键差异对比
| 维度 |
HTTP |
HTTPS(HTTP over SSL/TLS) |
| 协议栈位置 |
直接基于 TCP |
HTTP + SSL/TLS + TCP |
| 端口 |
80 |
443 |
| 数据传输 |
明文,可被窃听/篡改 |
加密传输,防窃听与篡改 |
| 身份验证 |
无 |
依赖 CA 签发证书 进行服务器身份校验 |
| 性能开销 |
无加密开销 |
存在 TLS 握手 等额外开销 |
| SEO 与生态 |
一般 |
多数平台优先收录,浏览器“安全”标识 |
| 典型场景 |
内网调试、对安全不敏感的资源 |
登录/支付、用户隐私数据、合规要求场景 |
以上差异中,端口、加密与证书机制是运维与合规层面最直观的区别;性能方面,TLS 握手会带来额外 RTT 与计算成本。
Nginx 配置差异与要点
- 启用 HTTPS 需准备证书与私钥(常见为 .crt/.pem 与 .key),并在 server 块中开启 SSL 并指定证书路径。
- 典型配置片段:
- 监听 443 ssl 并提供证书;
- 将 80 端口请求重定向到 https://$host$request_uri;
- 部署前执行 nginx -t 校验配置,再 reload/restart 生效。
- 若 Nginx 未内置 SSL 模块,需要重新编译启用 –with-http_ssl_module 后再部署。
如何选择
- 涉及用户登录/支付/隐私数据、有合规要求或面向公网用户的业务,优先使用 HTTPS(443)。
- 内网、测试、静态资源等对安全不敏感的场景,可继续使用 HTTP(80) 以简化部署与调试。
- 建议采用全站 HTTPS,并通过 HTTP→HTTPS 301 跳转统一入口,避免混合内容问题。