Variáveis ​​no nome do log - nginx

12

Eu tenho a seguinte configuração padrão do servidor no nginx:

# Default HTTP Server
server {
  listen 80 default;
  server_name _;
  access_log /var/log/nginx/$server_name.access.log;
  error_log /var/log/nginx/$server_name.error.log;

  server_name_in_redirect off;

  location / {
    root   domain.com/public;
    index  index.php;
    try_files $uri index.php;
  }

  location ~     \.(html|jpg|jpeg|gif|png|ico|css2|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js)$ {
    root /path/to/domain.com/public;
    expires 30d;
    break;
  }

  charset utf-8;

  location ~ \.php$ {
    include /opt/nginx/conf/fastcgi_params;
    fastcgi_pass  127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param  SCRIPT_FILENAME  /path/to/domain.com/public/index.php;   
  }

  location ~ \.(js|ico|gif|jpg|png|css)$ {
    root /path/to/domain.com/public;
  }
}

Eu tenho vários domínios apontando para o servidor. O que estou tentando realizar aqui é ter logs no formato de um /var/log/nginx/mydomain.com/access.logou de outro/var/log/nginx/mydomain.com.access.log

Em vez disso, estou recebendo /var/log/nginx/$server_name.access.log.

Se eu tentar o método de diretório, recebo um erro ao verificar a configuração nginx: [emerg] open() "/var/log/nginx/$server_name/access.log" failed (2: No such file or directory)

Por que o nginx não está passando a variável para o nome do arquivo?

Usando nginx / 1.0.0

Mahdi.Montgomery
fonte
Qual versão você está executando? Variáveis ​​nos nomes de arquivos de log são permitidas apenas desde 0.7.4. wiki.nginx.org/HttpLogModule
Frank Farmer
3
e mesmo assim, apenas em access_log. Variáveis ​​ainda não são permitidas no error_log. $ server_name também provavelmente não é a variável que você está procurando, pois sempre será expandida para '_' no seu caso. Você provavelmente estava realmente procurando por $ host.
kolbyjack
Estou usando a 1.0.0, e obrigado pelo ponteiro no $ host - era o que eu estava tentando realizar. Além disso, você não sabia que existia uma falha no servidor - muito obrigado pela migração.
Mahdi.Montgomery
1
isso não é possível hoje em dia nas versões mais recentes?
snh_nl

Respostas:

6

Você precisa usar a $hostvariável - permitida apenas para access_logdiretivas .

Warren
fonte
2
Assumirei que não há solução alternativa para passar uma variável para o error_log. O que é meio ruim.
Mahdi.Montgomery
2
não pode usar $hostvariável no access_logneighter
super-herói