Apache / Varnish / PHP: Apenas para confirmar, é possível atualizar automaticamente $ _SERVER ['REMOTE_ADDR'] para ter o IP do cliente real?

4

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?

    
por Gavin 08.09.2012 / 09:07

5 respostas

2

mod_extract_forwarded é o módulo mais suportado, estável e disponível para isso. Incluído em todas as principais distribuições.

link

    
por 08.09.2012 / 09:52
2

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...

    
por 08.09.2012 / 09:26
2

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.

    
por 17.10.2013 / 14:20
0

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.

    
por 17.07.2013 / 10:53
0

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

    
por 17.07.2013 / 10:17