Reverter o IP Remoto de Nginx Para o Servidor Apache no LogFormat

Este tutorial aborda o assunto como reverter o IP remoto de Nginx para o servidor Apache no LogFormat. Se você instalou o Engintron no seu servidor, o IP real do cliente pode não contar como visita no Awstats, no entanto, você pode reverter o IP remoto de Nginx para o Servidor Apache através do LogFormat encontrado no SSH do Centos 7, ou versões anteriores.
Obviamente você deve ter o cPanel & WHM instalados rodando com Apache no seu servidor, para usar plugin Engintron. Se confirmado, depois de instalar o plugin, acesse o LogFormat no Centos X, faça as alterações e obtenha o IP real do visitante, contabilizando as visitas do seu site, no programa de estatística do seu servidor Apache.
Configure LogFormat Para Reverter o IP Remoto de Nginx para o servidor Apache.
Opcionalmente você pode entrar no plugin do Engintron e clicar em Restore Nginx IP forwarding in Apache, para reverter o LogFormat e confirmar o IP remoto do visitante no Apache. Porém se o Apache for atualizado, estas configurações se desfazem. Por isso, você pode ver a seguir como configurar de forma definitiva.

Outra Opção é entrar no seu terminal SSH /etc/apache2/conf/httpd.conf
nano /etc/apache2/conf/httpd.conf
Procure pelas seguintes linhas, parecidas com estas:
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
Altere o %h, pelo %a como a seguir:
LogFormat "%a %l %u %t \"%r\" %>s %b" common
LogFormat "%a %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
Salve e saia.
Mas também nesta opção, o Apache perde as alterações de LogFormat quando for atualizado. Também é possível que ela se perca com uma atualização mínima e até mesmo uma reinicialização.
Agora tente configurar o IP real no LogFormat com estes comandos:
Nota: Testamos estes comando no servidor Apache com cPanel & WHM, no CentOs, rodando o EasyApache 4 e Apache 2.4. Você pode ver se o seu SSH é compatível com estes comandos.
Entre com seu login root e a senha, no terminal SSH e digite estas linhas, que encontramos em guithub
cp -ax /var/cpanel/templates/apache2_4/ea4_main.default /var/cpanel/templates/apache2_4/ea4_main.local sed -i 's/LogFormat "%h/LogFormat "%a/' /var/cpanel/templates/apache2_4/ea4_main.local /scripts/rebuildhttpdconf service httpd restart
Pronto. O IP real e remoto dos clientes do seu site será visualizado pelo programa de estatísticas Awstats, no Apache e as visitas serão contabilizadas normalmente. Fizemos o teste, atualizamos o WHM, reiniciamos o Apache e o LogFormat, continuou o mesmo %a. Não podeos garantir, se isso vai funcionar para você, mas é a última opção mais consolidada, que encontramos.
Entre na configuração apache nano /etc/apache2/conf/httpd.conf e confira se LogFormat está configurado %a.
Navegue nas página nano, com Ctrl + V para frente e Ctrl + y para traz. Saia com Ctrl + X e se você fez alguma alteração e precisa ser salva, Y e ENTER.
Por Que o Apache Registra o IP Errado Quando Está Atrás do Nginx?

Quando o Apache opera atrás de um proxy reverso como o Nginx, todos os registros de acesso passam a exibir o endereço IP do próprio Nginx, geralmente 127.0.0.1 ou o IP interno da rede, em vez do IP real do visitante. O problema ocorre porque, do ponto de vista do Apache, a requisição parte do Nginx, que atua como intermediário entre o cliente e o servidor de aplicação.
Essa situação compromete diretamente a qualidade dos logs de acesso, prejudica análises de segurança, invalida bloqueios por IP e distorce relatórios de geolocalização. Portanto, qualquer administrador que utilize esse stack precisa configurar o Apache para extrair o IP real do cabeçalho X-Forwarded-For, que o Nginx adiciona automaticamente a cada requisição encaminhada.
A solução está no módulo mod_remoteip do Apache, que permite substituir o IP registrado pelo endereço original do cliente antes que a requisição chegue às diretivas de log. Assim, os logs de acesso passam a refletir com precisão a origem real de cada visita, tornando o monitoramento, a segurança e a análise de tráfego muito mais confiáveis.
Nas seções a seguir, você vai entender como funciona esse mecanismo, como configurar corretamente o remoteip.conf, como ajustar o LogFormat e quais erros evitar durante o processo.
O Que É o mod_remoteip e Como Ele Resolve o Problema
O mod_remoteip é um módulo nativo do Apache HTTP Server responsável por substituir o endereço IP da conexão pelo IP real informado em cabeçalhos de proxy, como o X-Forwarded-For. Dessa forma, o Apache passa a enxergar o endereço do cliente original, e não o do intermediário.
Sem esse módulo ativo, o REMOTE_ADDR da requisição sempre apontará para o Nginx, tornando ineficazes qualquer regra de bloqueio por IP, qualquer análise de acesso por origem geográfica e qualquer auditoria de segurança baseada nos logs de acesso Apache proxy reverso.
Como o X-Forwarded-For Funciona no LogFormat
O Nginx, por padrão, adiciona o cabeçalho X-Forwarded-For em todas as requisições que encaminha ao Apache. Esse cabeçalho contém o IP real do visitante. Assim, ao configurar o Apache para ler esse cabeçalho via mod_remoteip, o campo %h no LogFormat passa a registrar o endereço correto.
O fluxo completo funciona da seguinte forma:
- O visitante acessa o site com o IP
203.0.113.42. - O Nginx recebe a requisição e adiciona o cabeçalho
X-Forwarded-For: 203.0.113.42. - O Nginx repassa a requisição ao Apache via
127.0.0.1. - Sem
mod_remoteip, o Apache registra127.0.0.1no log. - Com
mod_remoteipativo, o Apache lê o cabeçalho e registra203.0.113.42.
Portanto, a diferença entre um log útil e um log inútil está exclusivamente nessa camada de configuração.
Como Ativar o mod_remoteip no Apache
Antes de qualquer configuração, é necessário garantir que o módulo esteja habilitado no servidor. No Debian, Ubuntu e derivados, o comando é direto:
bash
sudo a2enmod remoteip
No CentOS, AlmaLinux e distribuições baseadas em Red Hat, o módulo geralmente já está compilado no Apache. Basta verificar se ele está carregado:
bash
httpd -M | grep remoteip
Após habilitar o módulo, reinicie o Apache para que a alteração entre em vigor:
bash
sudo systemctl restart apache2
# ou
sudo systemctl restart httpd
Configurar o remoteip.conf para Identificar o IP Real do Visitante
A configuração central acontece em um arquivo dedicado, geralmente criado em /etc/apache2/conf-available/remoteip.conf no Ubuntu/Debian, ou diretamente no httpd.conf em outras distribuições.
Exemplo de Configuração Básica do remoteip.conf com Nginx
apache
<IfModule mod_remoteip.c>
RemoteIPHeader X-Forwarded-For
RemoteIPInternalProxy 127.0.0.1
RemoteIPInternalProxy ::1
</IfModule>
A diretiva RemoteIPHeader instrui o Apache a ler o IP real a partir do cabeçalho X-Forwarded-For. Já a diretiva RemoteIPInternalProxy informa quais endereços são proxies confiáveis. Nesse caso, o 127.0.0.1 representa o próprio Nginx rodando na mesma máquina.
Se o Nginx estiver em um servidor separado, o IP privado dele deve ser incluído:
apache
RemoteIPInternalProxy 127.0.0.1
RemoteIPInternalProxy 10.0.0.5
Após criar o arquivo, ative-o no Ubuntu/Debian com:
bash
sudo a2enconf remoteip
sudo systemctl reload apache2
Ajustar o LogFormat para Registrar o IP Real no Apache

Com o mod_remoteip ativo, o campo %h no LogFormat já passa a exibir o IP real do cliente. No entanto, é recomendado verificar o formato de log atual e garantir que ele utiliza %h em vez de %a.
O formato Combined padrão do Apache usa %h, que é o hostname ou IP do cliente remoto. Com o mod_remoteip ativo, esse valor é automaticamente substituído pelo IP real extraído do cabeçalho X-Forwarded-For. Portanto, nenhuma alteração adicional no LogFormat é necessária quando o módulo está corretamente configurado.
Exemplo de LogFormat Ajustado
No arquivo de configuração do VirtualHost ou no apache2.conf, o formato ficará assim:
apache
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
CustomLog ${APACHE_LOG_DIR}/access.log combined
O ajuste é transparente para o restante da configuração do servidor, o que torna a implementação do mod_remoteip Apache Nginx bastante simples e não invasiva.
Configuração do Nginx para Enviar o IP Real ao Apache
Do lado do Nginx, é fundamental garantir que o cabeçalho X-Forwarded-For seja enviado corretamente. No bloco location ou server do arquivo de configuração do Nginx, adicione:
nginx
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
A variável $proxy_add_x_forwarded_for adiciona automaticamente o IP do cliente ao cabeçalho, encadeando IPs caso haja mais de um proxy na cadeia. Assim, o Apache sempre receberá a informação necessária para identificar o IP real do visitante via proxy.
Tabela Comparativa: Logs Antes e Depois da Configuração
| Cenário | IP Registrado no Apache | Cabeçalho Lido | Utilidade do Log |
|---|---|---|---|
| Sem mod_remoteip | 127.0.0.1 | Nenhum | Nula para análise de tráfego |
| Com mod_remoteip (mesmo servidor) | IP real do visitante | X-Forwarded-For | Alta |
| Com mod_remoteip (proxy externo) | IP real do visitante | X-Forwarded-For | Alta |
| Nginx mal configurado | IP do Nginx externo | X-Forwarded-For incompleto | Parcial |
| Múltiplos proxies encadeados | Primeiro IP da cadeia | X-Forwarded-For composto | Alta com validação |
Como Verificar se a Configuração Está Funcionando
Após aplicar todas as configurações, o teste mais direto é acessar o site a partir de uma conexão externa e verificar o log de acesso em tempo real:
bash
tail -f /var/log/apache2/access.log
Se o IP registrado corresponder ao endereço real do cliente, e não ao 127.0.0.1, a configuração está correta. Além disso, é possível usar o comando curl com o cabeçalho X-Forwarded-For para simular uma requisição de proxy e verificar o resultado:
bash
curl -H "X-Forwarded-For: 203.0.113.42" http://localhost/
Em seguida, verifique o log. O endereço 203.0.113.42 deve aparecer como IP de origem. Dessa forma, confirma-se que o Apache está lendo e registrando corretamente o cabeçalho enviado pelo Nginx.
Riscos de Segurança ao Confiar no X-Forwarded-For
Embora o mod_remoteip resolva o problema dos logs, é importante compreender que o cabeçalho X-Forwarded-For pode ser manipulado por um cliente malicioso caso o Apache aceite esse cabeçalho de qualquer origem.
Por isso, a diretiva RemoteIPInternalProxy deve listar apenas os IPs dos proxies confiáveis. Caso contrário, um atacante pode forjar o cabeçalho e mascarar o IP real nas requisições. Portanto, nunca configure o mod_remoteip para aceitar o cabeçalho de qualquer IP sem restrição. A configuração correta limita a confiança exclusivamente aos servidores Nginx da infraestrutura.
Perguntas Frequentes
1. O mod_remoteip funciona em todas as versões do Apache?
O mod_remoteip está disponível a partir do Apache 2.4, que é a versão estável atual na maioria das distribuições Linux modernas. Em versões anteriores, o módulo equivalente era o mod_rpaf, que exigia instalação separada e configuração distinta.
2. É necessário reiniciar o Apache após configurar o remoteip.conf?
Sim. Após qualquer alteração no módulo ou nos arquivos de configuração do Apache, é necessário pelo menos executar sudo systemctl reload apache2 para recarregar as diretivas. Alterações no carregamento de módulos exigem reinicialização completa com restart.
3. O que acontece se houver múltiplos proxies antes do Apache?
Nesse caso, o cabeçalho X-Forwarded-For conterá uma lista de IPs separados por vírgula, como 203.0.113.42, 10.0.0.1. O mod_remoteip lê o IP mais à esquerda, que representa o cliente original, desde que todos os proxies intermediários sejam declarados como confiáveis nas diretivas RemoteIPInternalProxy.
4. O LogFormat precisa ser alterado manualmente após ativar o mod_remoteip?
Não. O mod_remoteip age diretamente sobre o valor de REMOTE_ADDR antes que o log seja gravado. Portanto, o campo %h no LogFormat já passa a refletir o IP real automaticamente, sem necessidade de alterar o formato de log existente.
Conclusão
A configuração do mod_remoteip no Apache é uma etapa essencial para qualquer servidor que utilize o Nginx como proxy reverso. Sem ela, os logs de acesso perdem valor analítico e operacional, tornando impossível rastrear o IP real de visitantes, identificar padrões de ataque ou aplicar regras de bloqueio por origem.
Ao configurar corretamente o remoteip.conf com Nginx, definir os proxies internos confiáveis e garantir que o Nginx envie o cabeçalho X-Forwarded-For, o Apache passa a registrar com precisão o Apache log real client IP em cada requisição. Além disso, a integração entre o X-Forwarded-For LogFormat e o mod_remoteip Apache Nginx acontece de forma transparente, sem necessidade de alterações adicionais no formato de log.
Portanto, administradores que buscam logs confiáveis, segurança aprimorada e capacidade real de identificar IP real visitante proxy devem tratar essa configuração como parte obrigatória do setup de qualquer stack Apache mais Nginx em produção.





