У меня в конфигурационном файле следующее
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
записи и один из них server
s - это точка входа для всех остальных. Допустим, у вас есть один server
с настроенным SSL, который прослушивает подключения извне с помощью HTTPS и перенаправляет их на другие server
s, которые представляют собой различные шлюзы API.
Тогда недостаточно отключить логи доступа в каком-то шлюзе API server
s (или их location
s), поскольку запрос будет по-прежнему регистрироваться в журнале доступа внешнего 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;
}