Назад | Перейти на главную страницу

Правильный формат журнала в зависимости от маршрута

У меня есть несколько виртуальных хостов, работающих на сервере, пара через 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?