Полная запись URL в nginx в лог
мы используем следующий файл конфигурации сайта nginx в нашем производственном env.
log_format main '$http_x_forwarded_for - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $request_time';
server {
root /srv/www/web;
server_name *.test.com;
access_log /var/log/nginx/xxx.test.com.access.log main;
оба"http://a.test.com/ping "и"http://b.test.com/ping" http-запрос будет записываться в файл xxx.тест.com.доступ.журнал.
но есть проблема, nginx не хранит "доменное имя" в xxx.тест.com.доступ.журнал.
"http://a.test.com/ping "и"http://b.test.com/ping "поделиться тем же запросом" получить /свист."
Как я могу записать "a.test.com" или "b.test.com-в журнале нгинкс?
2 ответов
попробуйте добавить $host
переменной в log_format:
log_format main '$http_x_forwarded_for - $remote_user [$time_local] "$host" "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $request_time';
http://wiki.nginx.org/HttpCoreModule#.24host:
$ host
эта переменная равна строке Host в заголовке запроса или имени сервера, обрабатывающего запрос, если заголовок узла не доступный.
эта переменная может иметь другое значение от $http_host в таких случаи: 1) когда входной заголовок Хоста отсутствует или имеет пустое значение, $host равно значению директивы server_name; 2) когда значение хост содержит номер порта, $host не включает этот номер порта. значение $ host всегда в нижнем регистре с 0.8.17.
Если вы хотите зарегистрировать полный запрошенный url-адрес, то мой метод
log_format main '$http_x_forwarded_for - $remote_user [$time_local] '
'"$request_method $scheme://$host$request_uri $server_protocol" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $request_time';
таким образом, разделяя $request на его составные части и выскакивая $host посередине. Также позволяет увидеть, является ли запрос http https.