
나는 drupal의 웹 서버로 Apache를 사용하고 있습니다. 또한 Google Cloud CDN을 사용하고 있으며 내 인스턴스가 로드 밸런서 뒤에 있습니다(Google Cloud CDN 요구 사항). 문제는 이 지원 문서에 언급된 대로 로드 밸런서가 x-forwrded-for 헤더에 2개의 IP 주소를 추가한다는 것입니다.https://cloud.google.com/load-balancing/docs/https#target-proxies
아파치 로그에서 해당 IP를 분할하고 추가된 2개의 IP 주소에서 클라이언트 IP만 유지하고 싶습니다. 도와주세요
답변1
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
그러면 다음 형식의 로그가 생성됩니다.
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"
SetEnvIf 지시어는 ^ 문자를 사용하여 X-Forwarded-For 헤더의 시작 부분을 일치시키고 ([^,]+) 정규식을 사용하여 첫 번째 IP 주소를 일치시키고 캡처합니다. 캡처된 IP 주소는 x-forwarded-for-first 환경 변수에 저장됩니다.