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

Как скрыть часть пути в журнале ошибок nginx

Можно ли настроить nginx для вывода в журнал ошибок указанной части пути к файлам? F.e:

2017/09/16 19:59:28 [error] 10656#10656: *1702 open() "/home/user/www/favicon.ico" failed (2: No such file or directory), client: 256.256.256.256, server: example.com, request: "GET /favicon.ico HTTP/1.1", host: "example.com", referrer: "http://example.com/"

У пользователя есть chroot на «/ home / user /», поэтому «favicon.ico» для этого пользователя имеет следующий путь: «/www/favicon.ico». Реальный путь к файлу немного сбивает с толку.

Это сообщение об ошибке выводится сервером PHP FastCGI. Чтобы использовать пути относительно chroot, запустите сервер FastCGI в chroot. (Это также будет изолировать скрипты PHP, что, вероятно, хорошо!)

Если у кого-то будет аналогичная проблема, вот как я ее решаю (его нельзя пометить как правильный вопрос, потому что это обходной путь):

inotifywait -m -e modify --format "%w%f" /home/user/log/nginx/example.com.error.log | while read f; do if [[ $(grep "/home/user" $f | wc -c)  != 0 ]] ; then sed 's/\/home\/user//g' $f > $f\t ; cat $f\t > $f ; fi done

куда inotifywait (пакет inotify-tools) - наблюдатель за файлами в режиме монитора, который срабатывает при изменении файла:

inotifywait -m -e modify --format "%w%f"

затем в цикле while нам нужно запустить 2 команды, но сначала проверьте, содержит ли новая модификация файла определенную строку, чтобы избежать наложения в бесконечный цикл:

if [[ $(grep "/home/user" $f | wc -c) != 0 ]]

Если результат команды grep "/ home / user" $ f прошел в туалет -c что является средней длиной строки ! = 0 затем измените файл, заменив все / главная / пользователь в строку длины 0 //, сохраните вывод во временном файле и, наконец, запишите этот вывод из временного файла в файл журнала ошибок nginx кошка $ f \ t> $ f

sed 's/\/home\/user//g' $f > $f\t; cat $f\t > $f;done

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

Например:

try_files $uri $uri/ =404;

Приведенное выше утверждение должно вызывать nginx вести себя почти так же, как и по умолчанию, за исключением случаев, когда в журнал записываются отсутствующие URI.

Видеть этот документ для большего.