Nginx为静态资源提供HTTPS加密传输,本质是作为TLS终止点处理加解密并以明文读取本地文件返回,无需后端框架;需配置443端口、SSL证书与私钥、安全协议、HSTS头、静态根目录及HTTP重定向。

让 Nginx 为静态资源提供 HTTPS 加密传输,本质是让它作为 TLS 终止点:它负责处理 SSL/TLS 握手、加解密,再以明文方式读取本地文件并返回响应。整个过程不依赖后端应用(如 Python 或 Node.js),纯由 Nginx 完成。
准备有效的 SSL 证书和私钥
HTTPS 必须有合法的证书链和对应私钥。生产环境强烈推荐使用 Let’s Encrypt 签发的免费可信证书;测试或内网可自签名,但浏览器会提示“不安全”。
- Let’s Encrypt 方案:用 certbot 获取,证书通常存于 /etc/letsencrypt/live/yourdomain.com/fullchain.pem(证书链)和 /etc/letsencrypt/live/yourdomain.com/privkey.pem(私钥)
- 自签名方案(仅限测试):
openssl genrsa -out server.key 2048
openssl req -new -x509 -key server.key -out server.crt -days 365
注意:生成私钥时别设密码,否则 Nginx 启动会卡住 - 把证书和私钥统一放到安全目录(如 /etc/nginx/ssl/),并确保 Nginx 进程有读取权限(chown root:www-data /etc/nginx/ssl/*.pem,chmod 640)
配置监听 443 的 HTTPS Server 块
在站点配置文件(如 /etc/nginx/sites-enabled/static)中添加一个独立的 server 块:
- 必须写 listen 443 ssl http2; ——启用 HTTPS 并支持 HTTP/2,提升加载效率
- 指定证书路径:ssl_certificate /etc/nginx/ssl/server.crt; 和 ssl_certificate_key /etc/nginx/ssl/server.key;
- 限定协议与加密套件,兼顾安全与兼容性:
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384; - 加上 HSTS 响应头强制浏览器后续只走 HTTPS:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
映射静态资源并优化交付
在同一 server 块内配置资源服务逻辑:
- 用 root /var/www/static; 指定文件根目录,所有请求按路径直接映射到该目录下的文件
- 支持自动索引首页:index index.html index.htm;
- 设置合理缓存策略减少重复请求:
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { expires 1h; add_header Cache-Control "public, immutable"; } - 如需跨域访问(例如前端从另一域名加载资源),可加:
add_header Access-Control-Allow-Origin "*";(生产环境慎用通配符,建议明确指定源)
强制 HTTP 跳转 HTTPS
用户可能仍输入 http://,需新增一个仅监听 80 端口的 server 块做永久重定向:
- server { listen 80; server_name example.com; return 301 https://$server_name$request_uri; }
- 确认 DNS 已解析该域名,且服务器防火墙放行 80 和 443 端口
- 重载配置:sudo nginx -t && sudo systemctl reload nginx


















