Zmienne w nazwie dziennika - nginx

12

Mam następującą domyślną konfigurację serwera w 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;
  }
}

Mam kilka domen wskazujących na serwer. Co próbuję wykonać tutaj jest mieć logi w formacie jednej /var/log/nginx/mydomain.com/access.loglub/var/log/nginx/mydomain.com.access.log

Zamiast tego dostaję /var/log/nginx/$server_name.access.log.

Jeśli spróbuję metody katalogowej, podczas sprawdzania konfiguracji pojawia się błąd nginx: [emerg] open() "/var/log/nginx/$server_name/access.log" failed (2: No such file or directory)

Dlaczego Nginx nie przekazuje zmiennej do nazwy pliku?

Używanie nginx / 1.0.0

Mahdi.Montgomery
źródło
Z jakiej wersji korzystasz? Zmienne w nazwach plików dziennika są dozwolone tylko od wersji 0.7.4. wiki.nginx.org/HttpLogModule
Frank Farmer
3
i nawet wtedy, tylko w access_log. Zmienne nadal nie są dozwolone w dzienniku błędów. $ nazwa_serwera również prawdopodobnie nie jest zmienną, której tak naprawdę szukasz, ponieważ w twoim przypadku zawsze będzie się rozwijać do „_”. Prawdopodobnie naprawdę szukałeś hosta $.
kolbyjack
Używam 1.0.0 i dziękuję za wskaźnik na $ host - to właśnie starałem się osiągnąć. Nie wiedziałem też, że wystąpił błąd serwera - umysł oszalał, dzięki za migrację.
Mahdi.Montgomery
1
czy obecnie nie jest to możliwe w najnowszych wersjach?
snh_nl

Odpowiedzi:

6

Musisz użyć $hostzmiennej - dozwolonej tylko dla access_logdyrektyw .

królikarnia
źródło
2
Zakładam, że nie ma obejścia dla przekazywania zmiennej dla dziennika błędów. To trochę źle.
Mahdi.Montgomery
2
nie można użyć $hostzmiennej w access_logjaśniejszym
superbohater