MacOS下Nginx多域名SSL证书部署与配置指南

2026-04-07服务器164158

在 macOS 上用 Nginx 配置多个域名 HTTPS 服务,需为每个域名申请独立 Let’s Encrypt 证书(Certbot 支持多域名),Nginx 中为各域名设独立 server 块并正确引用 fullchain.pem 和 privkey.pem,再通过 launchd 定时续期并重载。

在 macOS 上用 Nginx 配置多个域名的 HTTPS 服务,核心是为每个域名准备独立的 SSL 证书,并在 Nginx 配置中正确指向对应的证书文件。系统自带的 OpenSSL 和 Homebrew 安装的 Nginx 足以支撑完整流程,无需额外编译或特殊权限。

使用 Certbot 自动申请多域名证书

Certbot 是最便捷的 Let’s Encrypt 证书获取工具,支持单次申请覆盖多个域名(包括子域名)。确保已安装 Homebrew 和 Certbot:

  • 安装 Certbotbrew install certbot
  • 申请证书(需提前将所有域名解析到本机 IP,并确保 80 端口可访问)
    sudo certbot certonly --standalone -d example.com -d www.example.com -d api.example.com
    执行后证书会保存在 /etc/letsencrypt/live/example.com/ 下,含 fullchain.pemprivkey.pem
  • 如需为不同主域名(如 site-a.comsite-b.net)分别申请,需运行两次命令,各自指定对应域名

Nginx 配置多个 server 块并绑定对应证书

每个域名应有独立的 server 块,监听 443 端口,且 server_name 与证书域名严格匹配(通配符证书除外)。示例配置片段:

server {
    listen 443 ssl http2;
    server_name example.com www.example.com;
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    root /usr/local/var/www/example;
    index index.html;
}

server {
    listen 443 ssl http2;
    server_name api.example.com;
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    location / {
        proxy_pass http://127.0.0.1:3000;
    }
}

server {
    listen 443 ssl http2;
    server_name site-b.net;
    ssl_certificate /etc/letsencrypt/live/site-b.net/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/site-b.net/privkey.pem;

    root /usr/local/var/www/site-b;
}

注意:ssl_certificate 必须指向包含完整证书链的 fullchain.pem,不能只用 cert.pem,否则部分客户端会提示证书不完整。

MonkeyCode

企业级AI开发平台,全新的AI编程体验,让你的研发团队效率Max

下载

自动续期与 Nginx 重载集成

Let’s Encrypt 证书有效期为 90 天,建议设置定时任务自动续期并平滑重载 Nginx:

  • 创建续期脚本(如 /usr/local/bin/renew-nginx.sh):
#!/bin/zsh
sudo certbot renew --quiet --no-self-upgrade
sudo nginx -s reload
  • 赋予执行权限:chmod +x /usr/local/bin/renew-nginx.sh
  • 添加到 macOS 的 launchd 定时任务(每周二凌晨 2:15 运行):
    创建 ~/Library/LaunchAgents/homebrew.certbot.renew.plist,内容包含 StartCalendarInterval 和程序路径

验证与调试常见问题

配置完成后务必验证语法并检查实际效果:

  • 检查 Nginx 配置是否合法:sudo nginx -t
  • 重启服务生效:sudo nginx -s reload
  • 用浏览器访问各域名,点击地址栏锁图标确认证书信息是否匹配当前域名
  • 若出现 NET::ERR_CERT_COMMON_NAME_INVALID,说明证书未覆盖该 server_name,需重新申请或检查域名拼写
  • 若提示“证书不可信”,大概率是用了 cert.pem 而非 fullchain.pem,或证书链缺失中间 CA

整个过程不需要修改系统 keychain 或手动导入根证书,Nginx 本身只负责提供标准 PEM 格式证书链。只要域名解析正确、端口开放、路径无误,HTTPS 就能稳定运行。

本文地址:https://www.ufcn.cn/article/2299018.html

如非特殊说明,本站内容均来自于网友自主分享,概不代表本站观点,如有任何问题我们都将在收到反馈后的第一时间进行处理!