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'];

Или я просто неправильно его настраиваю?

4
задан 8 September 2012 в 10:07
5 ответов

mod_extract_forwarded is most supported, stable and available module for this. Included in all major distributions.

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

2
ответ дан 3 December 2019 в 02:59

You should take a look at mod_rpaf which can be configured to 'fix' this for you

It changes the remote address of the client visible to other Apache modules when two conditions are satisfied...

2
ответ дан 3 December 2019 в 02:59

Я лично использую директиву auto_prepend_file в php.ini

Просто создайте сценарий PHP, например:

<?php $_SERVER['REMOTE_ADDR'] = $_SERVER['X_FORWARDED_FOR'];

, а затем отредактируйте свой php.ini на выполнить сценарий перед любым другим сценарием.

0
ответ дан 3 December 2019 в 02:59

Была бы полезна конкретная ошибка. Например, описание страницы, отображаемой в вашем браузере. Возможно, вы получаете 404, запрещенное сообщение, сообщение о тайм-ауте браузера по умолчанию.

Вот несколько указателей:

  1. Вы указали порт 8080 в директиве servername, а также в директиве Virtualhost. Хотя это может не быть источником вашей проблемы, это кажется бессмысленным. Я бы удалил его.
  2. У вас serverAlias ​​совпадает с именем сервера. Опять же, это кажется бессмысленным.
  3. Убедитесь, что вы настроили свою директиву Listen в httpd.conf / apache2.conf таким образом, чтобы apache прослушивал порт 8080
  4. Если между вашим веб-сервером и «внешним миром» установлен брандмауэр, вы необходимо будет настроить это соответствующим образом.
  5. Проверьте /var/www/vhosts/blog.mysite.com/log/error. «undefined symbol: proxy_hook_scheme_handler Action 'configtest' failed.»

    Я столкнулся с той же проблемой и на этой веб-странице, но никакого упоминания о решении в Интернете. Возможные решения находятся внутри «УСТАНОВИТЬ» пакета!

    Если экземпляр 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

0
ответ дан 3 December 2019 в 02:59

Как уже упоминалось, используйте 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.

3
ответ дан 3 December 2019 в 02:59

Теги

Похожие вопросы