mod_extract_forwarded é o módulo mais suportado, estável e disponível para isso. Incluído em todas as principais distribuições.
Eu simplesmente não consigo obter o IP do cliente real para mostrar em $ _SERVER ['REMOTE_ADDR'] do PHP. Ele mostra em $ _SERVER ['X_FORWARDED_FOR'], mas o $ _SERVER ['REMOTE_ADDR'] sempre aponta para o IP do serviço Varnish.
Eu brinquei com praticamente todas as sugestões de Varnish vcl que pude encontrar. Eu instalei o módulo do Apache mod_rpaf. Mas ainda não consigo obter $ _SERVER ['REMOTE_ADDR'] para refletir o IP real do cliente ...
Então, minha pergunta é, isso é possível ? Todas as pessoas que usam o Varnish precisam fazer algo assim para todas as aplicações PHP?:
$_SERVER['REMOTE_ADDR'] = $_SERVER['X_FORWARDED_FOR'];
Ou simplesmente não estou configurando corretamente?
mod_extract_forwarded é o módulo mais suportado, estável e disponível para isso. Incluído em todas as principais distribuições.
Você deve dar uma olhada no mod_rpaf que pode ser configurado para 'corrigir' isso para você
It changes the remote address of the client visible to other Apache modules when two conditions are satisfied...
Como mencionado, use mod_extract_forwarded.
Se você receber o seguinte erro ao recarregar a configuração do 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
Basta carregar o módulo mod_proxy antes de mod_extract_forwarded. Funciona bem no CentOS 6.4.
Eu, pessoalmente, faço uso da diretiva auto_prepend_file php.ini
Basta criar um script PHP assim:
<?php $_SERVER['REMOTE_ADDR'] = $_SERVER['X_FORWARDED_FOR'];
e edite seu php.ini para executar o script antes de qualquer outro script.
Em relação ao erro "undefined symbol: proxy_hook_scheme_handler A ação 'configtest' falhou."
Eu encontrei o mesmo problema nesta página, mas nenhuma menção a uma solução na web. As possíveis soluções estão dentro da 'INSTALAÇÃO' do pacote!
If the Apache instance you are adding mod_extract_forwarded to will not have mod_proxy and proxy_http loaded then you will get an error when mod_extract_forwarded is loaded. In that case edit mod_extract_forwarded.c and comment out the #define for USING_proxy_http_module or change it to an an #undef. If you subsequently run Apache with proxy_http do not forget to reinstate the #define; failure to do so will mean that any X-Fowarded-For header inserted by proxy_http will use the spoofed IP number in error.
Então, basicamente: habilite 'mod_proxy e proxy_http' OU comente o 'USING_proxy_http_module' definido no arquivo c e reconstrua. O último funcionou para mim, eu aparentemente apliquei a primeira solução em uma configuração de servidor anterior (e eu esqueci sobre isso).
[Editar:] Instale o 'mod_proxy' com apt-get instala o libapache2-mod-proxy-html
Tags php apache-2.2 varnish