在 Nginx 配置中,尝试动态加载 ssl_certificate,但

在 Nginx 配置中,尝试动态加载 ssl_certificate,但

在 Nginx 配置中,尝试动态加载 ssl_certificate,但

使用 $ssl_server_name 变量

   ssl_certificate /etc/letsencrypt/live/$ssl_server_name/fullchain.pem;
   ssl_certificate_key /etc/letsencrypt/live/$ssl_server_name/privkey.pem;

获取此权限错误

│2019/09/22 08:29:42 [错误] 7714#7714:*3 无法加载证书“/etc/letsencrypt/live/example.com/fullchain.pem”:BIO_new_file()在 SSL 握手时失败(SSL:错误:0200100D:系统库:fopen:权限被拒绝:fopen('/etc/letsencrypt/live/example.com/fullchain.pem','r')错误:2006D002:BIO 例程:BIO_new_file:系统 lib),客户端:,服务器:0.0.0.0:443

但即使不使用变量,它也能工作!

  ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

有没有办法根据 server_name 动态加载 ssl_certificate?

尝试了一些参考资料但仍然无法解决。

  1. nginx 配置使用 ssl_certificate 路径中的变量会引发权限错误
  2. https://trac.nginx.org/nginx/ticket/1744

答案1

只需在这里添加回复,以防有人遇到同样的问题。

nginx 启动时以 root 身份启动。如果您不使用变量,则可以在此时加载证书文件(以 root 身份)。

但是,如果您使用变量,则这些文件的加载需要等到请求到达,此时 nginx 不再以您在 .conf 中指定的用户身份以 root 身份运行。而且看起来这个用户无法读取这些文件。

这就是它在没有变量(以 root 身份打开文件)时可以工作,而使用变量(尝试以其他用户身份打开文件)时却不工作的原因。

您只需要让 nginx 用户能够读取这些文件。

相关内容