Variables en el nombre de registro - nginx

12

Tengo la siguiente configuración predeterminada del servidor en 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;
  }
}

Tengo varios dominios apuntando al servidor. Lo que estoy tratando de lograr aquí es tener registros en el formato de cualquiera /var/log/nginx/mydomain.com/access.logo/var/log/nginx/mydomain.com.access.log

En cambio, me estoy poniendo /var/log/nginx/$server_name.access.log.

Si pruebo el método de directorio obtengo un error al verificar la configuración nginx: [emerg] open() "/var/log/nginx/$server_name/access.log" failed (2: No such file or directory)

¿Por qué nginx no pasa la variable al nombre del archivo?

Usando nginx / 1.0.0

Mahdi.Montgomery
fuente
¿Qué versión estás ejecutando? Las variables en los nombres de los archivos de registro solo están permitidas desde 0.7.4. wiki.nginx.org/HttpLogModule
Frank Farmer
3
e incluso entonces, solo en access_log. Las variables aún no están permitidas en error_log. $ server_name tampoco es probablemente la variable que realmente está buscando, ya que siempre se expandirá a '_' en su caso. Probablemente estabas realmente buscando $ host.
kolbyjack
Estoy usando 1.0.0, y gracias por el puntero en $ host, eso es lo que estaba tratando de lograr. Además, no sabía que existía una falla en el servidor: una sorpresa, gracias por la migración.
Mahdi.Montgomery
1
¿No es esto posible hoy en día en las últimas versiones?
snh_nl

Respuestas:

6

Debe usar la $hostvariable: solo se permite para access_logdirectivas .

madriguera
fuente
2
Asumiré que no hay una solución alternativa para pasar una variable para el error_log ... Lo cual es un poco malo.
Mahdi.Montgomery
2
no se puede usar $hostvariable en el access_logneighter
superhéroe