Я просто не могу получить реальный 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 is most supported, stable and available module for this. Included in all major distributions.
Я лично использую директиву auto_prepend_file в php.ini
Просто создайте сценарий PHP, например:
<?php $_SERVER['REMOTE_ADDR'] = $_SERVER['X_FORWARDED_FOR'];
, а затем отредактируйте свой php.ini на выполнить сценарий перед любым другим сценарием.
Была бы полезна конкретная ошибка. Например, описание страницы, отображаемой в вашем браузере. Возможно, вы получаете 404, запрещенное сообщение, сообщение о тайм-ауте браузера по умолчанию.
Вот несколько указателей:
Я столкнулся с той же проблемой и на этой веб-странице, но никакого упоминания о решении в Интернете. Возможные решения находятся внутри «УСТАНОВИТЬ» пакета!
Если экземпляр 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
Как уже упоминалось, используйте 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.