Назад | Перейти на главную страницу

Как отключить ведение журнала Nginx?

У меня в конфигурационном файле следующее

server {
    listen       80;
    server_name  _;
    access_log  /var/log/nginx/access.log  main;
  ...

server {
    listen       80;
    server_name  example.com
    access_log  off;
    error_log off;

Но он все еще продолжает регистрироваться example.com виртуальный хост. Что я делаю не так?

Вам не хватает ; после директивы server_name. access_log и off рассматриваются как дополнительные имена_серверов.

Конечно, вы можете полностью отключить ведение журнала. Просто укажите файлы журнала на / dev / null и готово. ;)

access_log  /dev/null;
error_log /dev/null;

вы можете отключить access_log используя

access_log off;

но если вы хотите отключить error_log, просто не используйте опцию error_log в своей конфигурации.

Проблема OP заключалась в синтаксической ошибке, которая объясняется в этот ответ.


По состоянию на Январь 2020, с участием nginx 1.14.0+ общая проблема отключения доступа и регистрации ошибок в nginx решается следующим образом:


Журналы доступа

Чтобы отключить журналы на некотором уровне конфигурации, предполагая, что они были явно включены на более высоком уровне или включены по умолчанию (как они есть) используйте эту директиву *:

access_log off;

(В ответах говорится, что вам следует перенаправить такие журналы на /dev/null устарели.)

Обратите внимание, что access_log директива может быть установлена множественный раз на одном уровне, но указанная выше запись отключает ведение журнала доступа на текущем уровне.

Источник: Документы nginx для access_log


Журналы ошибок

Отключить журналы ошибок сложнее, поскольку НЕТ явной опции, чтобы отключить его на более низком уровне конфигурации, если он был включен на более высоком уровне или включен по умолчанию (как есть)!

Итак, в этом случае вам следует использовать то, что этот ответ предложил:

error_log /dev/null;

Источник: Документы nginx для error_log


Предостережения

Представьте, что у вас есть сингл http с включенным журналом доступа на этом уровне и внутри нескольких server записи и один из них servers - это точка входа для всех остальных. Допустим, у вас есть один server с настроенным SSL, который прослушивает подключения извне с помощью HTTPS и перенаправляет их на другие servers, которые представляют собой различные шлюзы API.

Тогда недостаточно отключить логи доступа в каком-то шлюзе API servers (или их locations), поскольку запрос будет по-прежнему регистрироваться в журнале доступа внешнего HTTPS server.

Плохой пример:

http {
  access_log  /var/log/nginx/access.log  main;

  server {
    listen 80;
    location /app1 {
      proxy_pass http://localhost:81;
    }
    (...)
  }

  server {
    listen 81;
    access_log off; # <----- this WON'T effectively work - requests will be logged in the access log by the server above
    (...)
  }
  (...)
}

Вам придется отключить журналы доступа на всех путях данных запросов, чтобы он работал в этом случае. Но, конечно, лучшим решением было бы подумать об упрощении вашей конфигурации, поскольку вы можете столкнуться со многими другими сюрпризами даже после того, как решите проблему с журналами доступа ...

Более простой пример конфигурации:

http {
  access_log  /var/log/nginx/access.log  main;

  server {
    listen 80;
    location /app1 {
      access_log off; # <----- this WILL work
      proxy_pass http://app1server;
    }
    (...)
  }

}


Это должно быть довольно просто, вы можете закомментировать строки журнала

server {
    listen       80;
    server_name  _;
    #access_log  /var/log/nginx/access.log  main;
  ...

server {
    listen       80;
    server_name  example.com
    #access_log  off;
    #error_log off;

и если вы получаете критические ошибки, вы должны сделать это так: ´error_log / dev / null crit; ´, так что это будет:

server {
    listen       80;
    server_name  _;
    access_log  /dev/null crit;
  ...

server {
    listen       80;
    server_name  example.com
    access_log  /dev/null crit;
    error_log /dev/null crit;

На основе условного входа в Сообщение Nginx но вместо использования переменной для определения при регистрации запроса просто используйте постоянное значение 0.

server {
listen       80;
server_name  _;
access_log  /var/log/nginx/access.log  main;
}

server {
listen       80;
server_name  example.com
access_log  /var/log/nginx/access.log if=0;
error_log /var/log/nginx/error.log if=0;
}