У меня есть несколько виртуальных хостов, работающих на сервере, пара через CDN и X-Forward-For
добавлен в заголовок, иногда он просто проходит через балансировщик нагрузки, где RemoteIPHeader
добавлен.
У меня есть 3 настраиваемых конфигурации журнала:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" proxy
LogFormat "%a %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" lb
и в моих конфигурациях виртуального хоста я использую либо lb, либо комбинированный, либо прокси для формата журнала.
Когда я добавляю RemoteIPHeader X-Forwarded-For
чтобы установить IP-адрес клиента вместо IP-адреса балансировщика нагрузки, журнал lb работает правильно, но прокси-сервер использует IP-адрес LB. Когда я удаляю RemoteIPHeader X-Forwarded-For
у прокси-сервера IP-адрес клиента, а у lb-адреса - IP-адрес балансировщика нагрузки. Это имеет смысл, поскольку мне нужно условно установить X-Forwarded-For
в зависимости от того, установлен ли он уже CDN или нет.
Я пробовал сделать это так:
<IfModule mod_headers>
RequestHeader set X-Forward-For RemoteIPHeader expr="req('X-Forward-For')==''"
</IfModule>
из этого вопроса однако он ничего не делает. Если да <IfModule mod_headers.c>
это создает проблему с синтаксисом, если я помещаю выше, где я устанавливаю журнал, он говорит RequestHeader set X-Forward-For RemoteIPHeader expr="req('X-Forward-For')==''"
неожиданный конец $.
Как можно установить X-Forward-For
правильно в зависимости от того, установлен он или нет из CDN?