Как отключить или указать местоположение журнала ошибок nginx?
Я сам скомпилировал nginx на Ubuntu.
Я запускаю свой nginx с параметром -c nginx.conf.
В моем файле nginx.conf я пытаюсь отключить журнал ошибок с ошибкой.
error_log /dev/null crit;
По-прежнему появляется сообщение об ошибке:
nginx: [alert] не удалось открыть файл журнала ошибок: open() "/usr/nginx/logs/error.log" не удалось (2: нет такого файла или каталога)
Как я могу отключить этот журнал или изменить его местоположение?
Ответы
Ответ 1
Синтаксис для отключения журнала ошибок в порядке, но docs сообщают, что перед чтением конфигурации используется файл журнала по умолчанию. (что кажется разумным, потому что, как бы иначе вы сказали, что у вас есть ошибка в вашей конфигурации)
Попробуйте создать этот файл вручную с правильными разрешениями для пользователя, который запускает nginx. Или попробуйте запустить сервер как root.
Ответ 2
Я решил эту проблему, используя параметр -p при запуске nginx, например:
/home/ubuntu/nginx/sbin/nginx -c /home/ubuntu/nginx/conf/nginx.conf -p /home/ubuntu/nginx
Это приведет к добавлению любых путей к журналу, указанных в конфиге, с помощью каталога префикса.
Ответ 3
Я просто решил это, используя этот параметр configure:
./configure --prefix="$HOME/nginx" --error-log-path=/dev/stderr
Поскольку я никогда не использую этот nginx в качестве демона и всегда запускаю его в оболочке, имеет смысл регистрировать ошибки в stderr.
Ответ 4
Вы не можете решить проблему, указав префикс -p
; потому что это применимо только к директивам в файле конфигурации; и поскольку RickyA уже отметил, что проблема заключается в том, что есть сборник ошибок в журнале ошибок, который nginx хочет открыть еще до того, как он откроет конфигурацию. Изменение разрешений журнала скомпилированных ошибок не является идеальным по понятным причинам.
Обходной путь заключается в том, чтобы указать журнал ошибок как конфигурацию в командной строке:
$ nginx -p . -g 'error_log error.log;'
или
$ nginx -p . -g 'error_log stderr;'
Вы все равно получите [alert], но, по крайней мере, это позволило мне запустить nginx как non-root на Ubuntu.
Ответ 5
Per этот пост в списке рассылки nginx.org (выдержка, приведенная ниже), %%ERROR_LOG_PATH%%
устанавливается как компиляционная опция и сразу же проверяется при запуске, вызывая предупреждение "Не удалось открыть". Указание префикса (с помощью -p
) может помочь подавить предупреждение, но только если %%ERROR_LOG_PATH%%
был указан как относительный путь во время компиляции.
Вы можете проверить, как он указан в вашем текущем исполняемом файле с помощью
nginx -V 2>&1 | grep -oE 'error-log-path=\S*'
Вот почему решение, предложенное @Michael, работает для некоторых, но не для других.
См. журнал изменений:
Изменения с nginx 0.7.53
...
*) Изменить: теперь журнал, заданный с помощью -error-log-path, создается из самого запуск.
*) Функция: теперь ошибки запуска и предупреждения выводятся на error_log и stderr.
...
Теперь скомпилировано в значение error_log, которое всегда используется для регистрации ошибок при запуске (и выдает предупреждение, если nginx не может его открыть). После того, как файл конфигурации были прочитаны - вместо этого будет использоваться error_log из config.
Если вы скомпилировали nginx с пути error_log относительно префикса - должно быть возможно переопределить startup error_log через -p переключатель.
Максим Дунин