Re: Путаница в последовательность записей в логах

Sergey Kandaurov pluknet на nginx.com
Ср Июл 15 11:29:55 UTC 2020


> On 15 Jul 2020, at 13:18, grey <nginx-forum на forum.nginx.org> wrote:
> 
> Приветствую всех!
> 
> 
> Заметил тут одну вещь: в файле access.log время запросов идет не по порядку,
> например:
> 
> 127.0.0.1 - - [12/Jul/2020:23:30:00 +0300] "GET /nginx-status HTTP/1.0" 200
> 117 "-" "-"
> 127.0.0.1 - - [13/Jul/2020:00:15:00 +0300] "GET /nginx-status HTTP/1.0" 200
> 117 "-" "-"
> 127.0.0.1 - - [13/Jul/2020:00:45:00 +0300] "GET /nginx-status HTTP/1.0" 200
> 117 "-" "-"
> 127.0.0.1 - - [12/Jul/2020:03:00:00 +0300] "GET /nginx-status HTTP/1.0" 200
> 117 "-" "-"
> 
> или вот
> 
> 127.0.0.1 - - [12/Jul/2020:02:20:00 +0300] "GET /nginx-status HTTP/1.0" 200
> 117 "-" "-"
> 45.157.*.* - - [12/Jul/2020:02:23:53 +0300] "GET / HTTP/1.1" 403 548 "-"
> "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)
> Chrome/52.0.2743.116 Safari/537.36"
> 127.0.0.1 - - [12/Jul/2020:02:30:00 +0300] "GET /nginx-status HTTP/1.0" 200
> 117 "-" "-"
> 127.0.0.1 - - [11/Jul/2020:02:40:00 +0300] "GET /nginx-status HTTP/1.0" 200
> 117 "-" "-"
> 
> Начал разбираться. Вот что выяснил - существует две конфигурации для двух
> разных адресов:
> 1. server
> {
> 	listen 127.0.0.1:80;
> 	server_name 127.0.0.1;
> 
> 	location /nginx-status 	{ 		stub_status;	}
> }
> 
> 2. server {
> 	listen       80;
> 	server_name  11.22.33.44;
> 
> 	access_log  logs/access.log  combined buffer=64k;
> ...
> }
> 
> Я так понимаю дело в буферизации. Но почему конфигурация 2 с включенной
> буферизацией влияет на конфигурацию 1 на запись логов без буфера? По идее
> логи о состоянии сервера при обращении с локального адреса 127.0.0.1 должны
> писаться сразу в файл, а с внешнего адреса - блоками по 64Кб.
> 
> В принципе, меня устроит однословный ответ разработчиков что все ок и так и
> задумано или это баг :)

В данном случае это один и тот же файл logs/access.log,
а значит и параметры буферизации в разных блоках server общие.
Здесь во 2-м блоке server параметр buffer=64k проапдейтил
существующую конфигурацию, что примерно соответствует:

server {
	listen 127.0.0.1:80;
	server_name 127.0.0.1;

	access_log  logs/access.log  combined buffer=64k;
	location /nginx-status 	{ 		stub_status;	}
}

server {
	listen       80;
	server_name  11.22.33.44;

	access_log  logs/access.log  combined buffer=64k;
}

Очевидно, что так сделано для удобства, чтобы было
достаточно задать параметры буферизации в одном месте.

-- 
Sergey Kandaurov



Подробная информация о списке рассылки nginx-ru