Полный URL-адрес записи в журнале nginx
Мы используем следующий файл конфигурации nginx site в нашем проекте 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.test.com.access.log.
Но есть проблема, nginx не сохраняет "доменное имя" в xxx.test.com.access.log.
"http://a.test.com/ping" и "http://b.test.com/ping" используют один и тот же запрос "Get/ping".
Как я могу записать "a.test.com" или "b.test.com" в журнале nginx?
Ответы
Ответ 1
Попробуйте добавить переменную $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 не включает этот номер порта. Значение $host всегда имеет нижний регистр с 0.8.17.
Ответ 2
Если вы хотите зарегистрировать полный запрошенный 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.
Ответ 3
Вы также можете попробовать добавить $http_host
$host
является переменной модуля Core.
$хост
Эта переменная равна строке Host в заголовке запроса или имя сервера, обрабатывающего запрос, если заголовок узла не является доступны.
Эта переменная может иметь другое значение от $http_host в таких случаях: 1) когда отсутствует входной заголовок хоста или имеет пустое значение, $host равно значению директивы server_name; 2), когда значение Host содержит номер порта, $host не включает этот номер порта. Значение $host всегда имеет нижний регистр с 0.8.17.
$http_host
также является переменной того же модуля, но вы не найдете его с этим именем, потому что он определяется как $http_HEADER
(ref).
$http_HEADER
Значение заголовка HTTP-заголовка HEADER при преобразовании в нижний регистр и с тиреми, преобразованными в "подчеркивания", например. $http_user_agent, $http_referer...;
Резюмируя:
-
$http_host
всегда всегда является заголовком запроса HTTP_HOST
.
-
$host
равно $http_host
, в нижнем регистре и без номера порта (если имеется), кроме случаев, когда HTTP_HOST
отсутствует или является пустым значением. В этом случае $host
равно значению директивы server_name
сервера, обработавшего запрос.