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

Nginx: как мне реплицировать файл Apache other_vhosts_access.log, чтобы получить vhost в начале строки журнала?

У меня есть несколько сайтов, размещенных на сервере под управлением Nginx. Я не хочу использовать отдельные файлы журналов для всех моих виртуальных хостов, но я хочу иметь возможность определять по журналам, к какому виртуальному хосту Nginx принадлежал каждый запрос. Это невозможно с "комбинированным" форматом NCSA по умолчанию, используемым /var/log/nginx/access.log.

Apache в Debian / Ubuntu по умолчанию ведет журнал в /var/log/apache2/other_vhosts_access.log, который делает укажите имя виртуального хоста. Как мне воспроизвести это для Nginx?

Сохраните следующий фрагмент как /etc/nginx/other-vhosts-access-log.conf и перезагрузите Nginx. Это запустит запись в /var/log/nginx/other_vhosts_access.log. (Это будет не прекратить регистрацию в /var/log/nginx/access.log.) Формат тот же ("комбинированный" формат NCSA), но со значением server_name в начале строки. Обратите внимание, что используется имя виртуального хоста, которое не обязательно совпадает с запрошенным именем хоста (если есть дополнительные server_name директивы для псевдонимов).

# borrowed from Apache
# (Could use $host instead of $server_name to log vhost aliases separately)
log_format vhost_combined '$server_name $remote_addr - $remote_user [$time_local] '
                          '"$request" $status $body_bytes_sent '
                          '"$http_referer" "$http_user_agent"';

# Define an access log for VirtualHosts that don't define their own logfile
access_log /var/log/nginx/other_vhosts_access.log vhost_combined

(Следите за ротацией журналов, но это должно быть покрыто для всех файлов в / var / log / nginx с помощью nginx-full файл logrotate пакета.)

Предупреждение: Не пытайтесь отключить запись в /var/log/nginx/access.log с помощью access_log off; перед указанным выше, поскольку это предотвратит последующие access_log выписки из рабочего.