Подтвердить что ты не робот

Как отключить или указать местоположение журнала ошибок nginx?

Я сам скомпилировал nginx на Ubuntu. Я запускаю свой nginx с параметром -c nginx.conf. В моем файле nginx.conf я пытаюсь отключить журнал ошибок с ошибкой.

error_log /dev/null crit;

По-прежнему появляется сообщение об ошибке: nginx: [alert] не удалось открыть файл журнала ошибок: open() "/usr/nginx/logs/error.log" не удалось (2: нет такого файла или каталога)

Как я могу отключить этот журнал или изменить его местоположение?

4b9b3361

Ответ 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 переключатель.

Максим Дунин