Nginx启用HTTPS需独立server块监听443端口并配置ssl_certificate和ssl_certificate_key;必须编译启用--with-http_ssl_module,证书存/etc/nginx/ssl/且私钥权限为600,最后用nginx -t校验并reload生效。

要在 Nginx 的 server 块中启用 HTTPS,核心是配置监听 443 端口、指定证书路径,并确保 SSL 模块已启用。不能在 HTTP 的 server 块里混写 SSL 指令,必须用独立的 HTTPS server 块。
确认 SSL 模块已编译启用
Nginx 默认不带 HTTPS 支持,必须编译时加入 --with-http_ssl_module。运行以下命令验证:
-
nginx -V 2>&1 | grep -o with-http_ssl_module—— 有输出说明模块就绪 - 若无输出,需重新编译:进入源码目录执行
./configure --prefix=/usr/local/nginx --with-http_ssl_module,再make,最后替换objs/nginx到安装目录的sbin/下 - 系统缺少
openssl-devel(CentOS)或libssl-dev(Ubuntu)会导致 configure 静默跳过该模块,务必提前安装
准备并放置证书文件
证书和私钥必须存放在 Nginx 进程可读、且权限受控的位置:
- 推荐路径:
/etc/nginx/ssl/(用sudo mkdir -p /etc/nginx/ssl创建) - 上传
.crt(或fullchain.pem)和.key(或privkey.pem)到该目录 - 私钥权限必须为
600:sudo chmod 600 /etc/nginx/ssl/your_domain.key - 证书文件建议
644;所有权设为 Nginx 运行用户,如sudo chown nginx:nginx /etc/nginx/ssl/*.key - 私钥不能加密(即生成时未设密码),否则启动失败;如有密码,用
openssl rsa -in server.key.org -out server.key去密
编写 HTTPS server 块
在站点配置文件(如 /etc/nginx/conf.d/example.com.conf)中添加独立的 HTTPS server 块:
- 监听 443 端口并声明
ssl:listen 443 ssl http2;(http2可选但推荐) - 填写域名:
server_name example.com www.example.com; - 指定证书路径(必须绝对路径):
ssl_certificate /etc/nginx/ssl/example.com.crt; - 指定私钥路径:
ssl_certificate_key /etc/nginx/ssl/example.com.key; - 推荐加固配置(提升兼容性与安全性):
ssl_protocols TLSv1.2 TLSv1.3;ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;ssl_prefer_server_ciphers off;
配套配置 HTTP 自动跳转
单独新增一个监听 80 端口的 server 块,实现强制跳转:
listen 80;server_name example.com www.example.com;- 用
return 301实现高效重定向:return 301 https://$host$request_uri; - 切勿在一个
server块里同时写listen 80和ssl_certificate,Nginx 会直接报错
配置完成后,执行 sudo nginx -t 检查语法,无误则 sudo nginx -s reload 生效。浏览器访问 https://example.com 即可验证。


















