Nginx:可以在access_log中使用regex $ capture而不是error_log

时间:2016-01-04 21:05:13

标签: nginx

我使用正则表达式服务器名称进行以下Nginx配置,因此我可以轻松添加静态站点而无需添加新配置条目:

server {
        server_name ~^(?<domain>.+)$;
        root /home/static/sites/$domain;

        access_log /var/log/nginx/$domain-static-access.log;
        error_log /var/log/nginx/$domain-static-error.log;
}

这适用于提供网站,访问日志最终会在例如根据需要/var/log/nginx/example.com-static-access.log。但错误日志最终在/var/log/nginx/$domain-static-error.log。它不会插入该正则表达式捕获的值。

知道如何解决这个问题吗?

2 个答案:

答案 0 :(得分:2)

只有一些nginx配置指令支持变量。是否明确记录了特定参数中特定配置指令是否支持变量。例如,access_log指令description说:

  

文件路径可以包含变量(0.7.6+),但是这些日志有一些约束......

error_log指令根本不支持变量,因此description没有提及变量支持。请注意,这是故意的:错误日志用于记录错误,包括内存分配错误等低级错误,错误记录旨在避免可能失败的操作。

换句话说,error_log不支持变量,也没有计划添加这样的支持。请改用一些固定名称。

答案 1 :(得分:1)

那么,看看this。实际上,似乎error_log路径不能接受nginx配置文件中的变量。