Nginx 错误日志不会读取变量

jan*_*anw 1 nginx

在我的虚拟主机中,我有:

root   /var/www/$server_name/public_html;
index  index.php;

access_log /var/log/nginx/$server_name.access.log;
error_log  /var/log/nginx/$server_name.error.log debug;
Run Code Online (Sandbox Code Playgroud)

对于根和访问日志的$server_name工作。它不适用于错误日志。

在此处输入图片说明

我看到它是由 root 而不是 pi 设置的(我使用pi而不是data-www)我该如何解决这个问题?

nginx/1.13.5

小智 5

据我所知,error_log即使您可以在其中使用变量,仍然不允许使用它们access_log(因为您的屏幕截图显示在您的场景中正常工作)。

除此之外,您几乎应该总是使用$host它,因为它是唯一能保证说出一些合理内容的变量,而不管用户代理的行为如何。

您可以在nginx 文档中检查 $host 和 $server_name 之间的区别:

  • $host: 按此优先顺序:请求行中的主机名,或“Host”请求头字段中的主机名,或与请求匹配的服务器名。

  • $server_name:接受请求的服务器的名称。它包含server_name处理请求的虚拟主机的 ,正如它在 nginx 配置中定义的那样。如果服务器包含多个 server_names,则此变量中只会出现第一个。

由于您必须考虑用户代理可能会做的所有可能的事情,然后形成一个 HTTP 请求(古老的 HTTP/1.0 请求和现代写得不好的软件可能一直发生),您应该考虑仅使用$host变量预期目的。

值得一提的access_log 处理ngx_http_log_module,而 error_log的处理方式ngx_core_module.