Variables dans le nom du journal - nginx

12

J'ai la configuration de serveur par défaut suivante dans 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;
  }
}

J'ai plusieurs domaines pointant vers le serveur. Ce que je suis en train d'accomplir ici est d'avoir des journaux dans le format de l' un /var/log/nginx/mydomain.com/access.logou/var/log/nginx/mydomain.com.access.log

Au lieu de cela, je reçois /var/log/nginx/$server_name.access.log.

Si j'essaie la méthode du répertoire, j'obtiens une erreur lors de la vérification de la configuration nginx: [emerg] open() "/var/log/nginx/$server_name/access.log" failed (2: No such file or directory)

Pourquoi nginx ne transmet-il pas la variable au nom de fichier?

Utilisation de nginx / 1.0.0

Mahdi.Montgomery
la source
Quelle version utilisez-vous? Les variables dans les noms de fichiers journaux ne sont autorisées que depuis la 0.7.4. wiki.nginx.org/HttpLogModule
Frank Farmer
3
et même alors, uniquement dans access_log. Les variables ne sont toujours pas autorisées dans error_log. $ server_name n'est probablement pas non plus la variable que vous recherchez vraiment, car elle se développera toujours en '_' dans votre cas. Vous cherchiez probablement vraiment $ host.
kolbyjack
J'utilise 1.0.0, et merci pour le pointeur sur $ host - c'est ce que j'essayais d'accomplir. En outre, je ne savais pas que la défaillance du serveur existait - époustouflant, merci pour la migration.
Mahdi.Montgomery
1
n'est-ce pas possible de nos jours dans les dernières versions?
snh_nl

Réponses:

6

Vous devez utiliser la $hostvariable - uniquement autorisée pour les access_logdirectives .

garenne
la source
2
Je suppose qu'il n'y a pas de solution pour passer une variable pour error_log .. Ce qui est un peu dommage.
Mahdi.Montgomery
2
ne peut pas utiliser de $hostvariable dans le access_logneighter
super