Полная запись 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.