Что подразумевается под полем http_x_real_ip в log_format Nginx?
Привет.
Разбираю директиву log_format в конфигурации работающего Nginx, и значением одного из полей является $http_x_real_ip.
Не могу понять, что это за переменная. Не нахожу ни следа подобной переменной в документации Nginx.
Это какая-то пользовательская переменная, и ее нужно искать глубже в конфигурации?
Прав ли я, изучая другой раздел документации, в том, что X-Real-IP будет соответствовать X-Forwarded-For -- потому-то в случае, когда конфигурация логов подразумевает наличие обоих полей, они равнозначны?
Если прав -- зачем одинаковые поля с разными наименованиями? Что я упускаю?
Salamandrine, технически, с точки зрения протокола HTTP, это два разных заголовка.
X-Forwarded-For исторически используется в прокси-серверах, может содержать несколько значений через запятую и вообще говоря ему нельзя доверять, потому что любой прокси-сервер на пути может туда записать что угодно. В реальности настоящих прокси серверов в дикой природе уже практически нет.
В nginx используется заголовок X-Real-IP в тех местах где ему гарантированно можно доверять. Например если вы ставите свой nginx за другим сервером который вы контролируете (или доверяете тем кто его контролирует) и который выставляет правильный заголовок X-Real-IP.
Salamandrine, формат этих заголовков отличается. В X-Forwarded-For может указываться несколько ip адресов через запятую. Первым будет ip клиента, а следующие - ip промежуточных прокси, через которые проходил запрос: X-Forwarded-For: <client>, <proxy1>, <proxy2>
Более подробно по ссылке.
Добавлю: пользователь может заставить свой браузер при отправке HTTP-запроса выставлять этот X-Forwarded-For, с целью обмана например, типа "использовался прокси". А вот X-Real-IP пользователь выставляй-не выставляй - на принимающем сервере он будет заменён на реальный IP, с которого пришёл HTTP-запрос.