У меня есть несколько сайтов, размещенных на сервере под управлением 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
выписки из рабочего.