Estou usando o Apache como meu servidor web para Drupal. Além disso, estou usando o Google Cloud CDN e minha instância está atrás de um balanceador de carga (requisito para o Google Cloud CDN). O problema é que o balanceador de carga anexa 2 endereços IP ao cabeçalho x-forwrded-for conforme mencionado neste documento de suporte -https://cloud.google.com/load-balancing/docs/https#target-proxies
Quero dividir esses IPs no log do Apache e manter apenas o IP do cliente dos 2 endereços IP que ele anexa. Por favor ajude
Responder1
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" \"%{x-forwarded-for-first}e\"" combined
SetEnvIf X-Forwarded-For "^([^,]+)" x-forwarded-for-first=$1
Isso produzirá logs no seguinte formato:
127.0.0.1 - - [23/Dec/2022:12:34:56 +0100] "GET /index.html HTTP/1.1" 200 123 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36" "203.0.113.45"
A diretiva SetEnvIf usa o caractere ^ para corresponder ao início do cabeçalho X-Forwarded-For e a expressão regular ([^,]+) para corresponder e capturar o primeiro endereço IP. O endereço IP capturado é então armazenado na variável de ambiente x-forwarded-for-first.


