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

Apache / Varnish / PHP: Просто чтобы подтвердить, возможно ли автоматическое обновление $ _SERVER ['REMOTE_ADDR'], чтобы иметь реальный IP-адрес клиента?

Я просто не могу отобразить реальный 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 - наиболее поддерживаемый, стабильный и доступный модуль для этого. Входит во все основные дистрибутивы.

http://www.openinfo.co.uk/apache/

Я лично использую 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