Я просто не могу отобразить реальный IP-адрес клиента в PHP $ _SERVER ['REMOTE_ADDR']. Он отображается в $ _SERVER ['X_FORWARDED_FOR'], но $ _SERVER ['REMOTE_ADDR'] всегда указывает на IP-адрес службы Varnish.
Я поиграл практически со всеми предложениями Varnish vcl, которые смог найти. Я установил модуль Apache mod_rpaf. Но я все еще не могу заставить $ _SERVER ['REMOTE_ADDR'] отображать реальный IP-адрес клиента ...
Итак, мой вопрос: это вообще возможно? Каждый, кто использует Varnish, должен делать что-то подобное для всех приложений PHP ?:
$_SERVER['REMOTE_ADDR'] = $_SERVER['X_FORWARDED_FOR'];
Или я просто не правильно настраиваю?
Как уже упоминалось, используйте mod_extract_forwarded.
Если при перезагрузке конфигурации apache вы получите следующую ошибку:
Syntax error on line 1 of /etc/httpd/conf.d/mod_extract_forwarded.conf: Cannot load /etc/httpd/modules/mod_extract_forwarded.so into server: /etc/httpd/modules/mod_extract_forwarded.so: undefined symbol: proxy_hook_scheme_handler
Просто загрузите модуль mod_proxy перед mod_extract_forwarded. Прекрасно работает на CentOS 6.4.
Вы должны взглянуть на mod_rpaf который можно настроить, чтобы "исправить" это за вас
Он изменяет удаленный адрес клиента, видимый для других модулей Apache, когда выполняются два условия ...
mod_extract_forwarded - наиболее поддерживаемый, стабильный и доступный модуль для этого. Входит во все основные дистрибутивы.
Я лично использую auto_prepend_file директива в php.ini
Просто создайте сценарий PHP следующим образом:
<?php $_SERVER['REMOTE_ADDR'] = $_SERVER['X_FORWARDED_FOR'];
а затем отредактируйте свой php.ini, чтобы сценарий выполнялся перед любым другим сценарием.
По поводу ошибки «неопределенный символ: proxy_hook_scheme_handler Действие 'configtest' не выполнено."
Я столкнулся с той же проблемой и просмотрел эту веб-страницу, но не упоминал о решении в Интернете. Возможные решения находятся внутри «УСТАНОВКИ» пакета!
Если для экземпляра Apache, в который вы добавляете mod_extract_forwarded, не будут загружены mod_proxy и proxy_http, то при загрузке mod_extract_forwarded вы получите сообщение об ошибке. В этом случае отредактируйте mod_extract_forwarded.c и закомментируйте #define для USING_proxy_http_module или измените его на #undef. Если впоследствии вы запустите Apache с proxy_http, не забудьте восстановить #define; невыполнение этого требования будет означать, что любой заголовок X-Fowarded-For, вставленный с помощью proxy_http, по ошибке будет использовать поддельный IP-номер.
Итак, в основном: либо включите 'mod_proxy и proxy_http', либо закомментируйте определение 'USING_proxy_http_module' в файле c и перестройте. Последнее сработало для меня, я, по-видимому, применил первое решение на более ранней настройке сервера (и я забыл об этом).
[Изменить:] Установите 'mod_proxy' с помощью apt-get install libapache2-mod-proxy-html