不同的端口提供不同的 SSL 证书

不同的端口提供不同的 SSL 证书

我有一台使用 certbot 设置了 SSL 的 nginx 服务器。最初是其他人设置的服务器。主要文件在域的根目录下提供,并且有一个节点 api 在端口 4040 上运行。问题是,虽然根域的 SSL 证书工作正常(例如https://example.com/some/path),API 的 SSL 证书已过期(https://example.com:4040/api/route)。我甚至不知道可以通过这种方式设置 SSL,在查看了我的 nginx 配置后,我不知道它是如何以这种方式运行的。这是我的 nginx 配置(在 /etc/nginx/sites-enabled/default 中)

server {
    root /var/www/myapp/current/dist;

    server_name example.com;

    listen [::]:443 ssl ipv6only=on; # managed by Certbot
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

    location / {
      try_files $uri $uri/ /index.html;
    }
}

server {
    if ($host = example.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


    listen 80 default_server;
    listen [::]:80 default_server;

    server_name example.com;
    return 404; # managed by Certbot
}

使用此设置一切都运行良好,直到今天 :4040 端口提供的 SSL 证书过期。我想让为根域提供的证书也为 :4040 端口提供服务,但我不知道该怎么做。

答案1

我搞清楚了,确实应该早点发现这个问题。我为 api 运行的节点服务器通过 https 模块自行处理 SSL 证书。由于证书由 certbot 更新后应用程序没有重新启动,因此它仍在提供旧证书。重新启动节点应用程序解决了这个问题。

处理此问题的正确方法是结合使用--pre-hook--post-hookcertbot 的更新功能。因为我使用 pm2 管理我的节点应用程序,所以我需要将我的 certbot cron 作业更新为:

@monthly   /path/to/certbot-auto renew --standalone --post-hook "pm2 restart myapp"

相关内容