一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

Linux 如何为 Nginx 配置 SSL 证书实现 HTTPS 访问

时间:2026-09-04 10:14:49 编辑:袖梨 来源:一聚教程网

Nginx 配置 HTTPS 需满足三要素:编译时启用 --with-http_ssl_module 模块、证书与私钥路径正确且权限合规(私钥600)、HTTP 与 HTTPS 分属独立 server 块并正确监听端口。

Nginx 要跑 HTTPS,核心就三件事:模块得有、证书得对、配置得准。缺一不可,卡住的往往不是步骤多,而是某个细节没到位。

确认 Nginx 已编译 SSL 模块

Nginx 本身不自带 HTTPS 支持,必须编译时加 --with-http_ssl_module 才能识别 ssl_certificate 这类指令。

  1. 运行 nginx -V 2>&1 | grep -o with-http_ssl_module
  2. 有输出说明模块已启用;没输出,后续所有配置都会失败,nginx -t 直接报 unknown directive "ssl_certificate"
  3. 若缺失,需回到源码目录重新编译:
    1. ./configure --prefix=/usr/local/nginx --with-http_ssl_module
    2. make(别 make install,避免覆盖配置)
    3. cp objs/nginx /usr/local/nginx/sbin/
  4. 注意:系统缺少 openssl-devel(CentOS)或 libssl-dev(Ubuntu)会导致 configure 静默跳过 SSL 模块,务必提前装好

上传并设置证书文件权限

证书和私钥必须放对位置、设对权限,否则 Nginx 启动失败或拒绝读取。

  1. 推荐路径:/etc/nginx/ssl/(创建命令:sudo mkdir -p /etc/nginx/ssl
  2. .crt(或 .pem)和 .key 文件上传至此目录
  3. 私钥权限必须是 600sudo chmod 600 /etc/nginx/ssl/your_domain.key
  4. 证书文件权限建议 644,但关键是私钥不能被组或其他人读取
  5. 路径必须写绝对路径,不能用 ~/ 或相对路径,Nginx 不解析 shell 符号
  6. 私钥不能加密(即生成时没设密码),如有,用 openssl rsa -in server.key.org -out server.key 去密

配置独立的 HTTP 和 HTTPS server 块

HTTP 和 HTTPS 必须分开写在两个独立的 server 块里,混在一起会直接报错。

  1. HTTPS server(监听 443)
    1. listen 443 ssl http2;ssl 关键字不可少)
    2. server_name your-domain.com;
    3. ssl_certificate /etc/nginx/ssl/your-domain.com.crt;
    4. ssl_certificate_key /etc/nginx/ssl/your-domain.com.key;
  2. HTTP server(监听 80,仅用于跳转)
    1. listen 80;
    2. server_name your-domain.com;
    3. return 301 https://$server_name$request_uri;(比 rewrite 更简洁可靠)
  3. 不要在一个 server 块里同时写 listen 80ssl_certificate,Nginx 会拒绝加载

验证并重载服务

改完配置不是直接重启,得先验证再平滑生效。

  1. 运行 sudo nginx -t 检查语法是否正确
  2. 若提示 success,执行 sudo nginx -s reload 重载配置
  3. 检查 443 端口是否监听:sudo ss -tlnp | grep :443
  4. 确保防火墙放行 443(如 sudo ufw allow 443sudo firewall-cmd --permanent --add-port=443/tcp
  5. 浏览器访问 https://your-domain.com,看是否锁图标正常,无证书警告

不复杂但容易忽略

热门栏目