Ich verwende Apache als Webserver für Drupal. Außerdem verwende ich Google Cloud CDN und meine Instanz befindet sich hinter einem Load Balancer (Voraussetzung für Google Cloud CDN). Das Problem besteht darin, dass der Load Balancer 2 IP-Adressen an den Header x-forwrded-for anhängt, wie in diesem Supportdokument erwähnt -https://cloud.google.com/load-balancing/docs/https#target-proxies
Ich möchte diese IPs im Apache-Protokoll aufteilen und nur die Client-IP der beiden angehängten IP-Adressen behalten. Bitte helfen Sie
Antwort1
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
Dadurch werden Protokolle im folgenden Format erstellt:
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"
Die Direktive SetEnvIf verwendet das Zeichen ^, um den Anfang des Headers X-Forwarded-For abzugleichen, und den regulären Ausdruck ([^,]+), um die erste IP-Adresse abzugleichen und zu erfassen. Die erfasste IP-Adresse wird dann in der Umgebungsvariable x-forwarded-for-first gespeichert.


