Переменные в имени журнала - nginx

12

У меня есть следующие настройки сервера по умолчанию в 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;
  }
}

У меня есть несколько доменов, указывающих на сервер. То , что я пытаюсь выполнить здесь иметь журналы в формате либо /var/log/nginx/mydomain.com/access.logили/var/log/nginx/mydomain.com.access.log

Вместо этого я получаю /var/log/nginx/$server_name.access.log.

Если я попробую метод каталога, я получаю ошибку при проверке конфигурации nginx: [emerg] open() "/var/log/nginx/$server_name/access.log" failed (2: No such file or directory)

Почему nginx не передает переменную в имя файла?

Использование nginx / 1.0.0

Mahdi.Montgomery
источник
Какую версию вы используете? Переменные в именах файлов журнала допускаются только после версии 0.7.4. wiki.nginx.org/HttpLogModule
Фрэнк Фармер
3
и даже тогда, только в access_log. Переменные по-прежнему не допускаются в error_log. $ server_name также, вероятно, не та переменная, которую вы действительно ищете, так как она всегда будет расширяться до '_' в вашем случае. Вы, наверное, действительно искали $ host.
kolbyjack
Я использую 1.0.0, и спасибо за указатель на $ host - это то, что я пытался сделать. Кроме того, я не знал, что существовал сбой сервера - ошеломленный, спасибо за миграцию.
Mahdi.Montgomery
1
это не возможно в настоящее время в последних версиях?
snh_nl

Ответы:

6

Вам нужно использовать $hostпеременную - разрешено только для access_logдиректив .

кроличий садок
источник
2
Я предполагаю, что нет никакого обходного пути для передачи переменной для error_log. Что является слишком плохим.
Mahdi.Montgomery
2
нельзя использовать $hostпеременную у access_logсоседа
супергерой