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.
Este guia foi útil para você?





