본문 바로가기

AWS

[WEB] Apache Log 포맷 기본 정리 (+ Client의 IP를 보고 싶을 경우)

반응형

웹 서버 중 많이 사용되는 아파치의 로그 포맷을 수정하는 방법에 대해서 정리해본다.

 

<Apache 설정 파일 기본>

 

Apache 관련 설정은 conf 파일에 보통 존재한다.

 

만약 아파치를 컴파일하여 설치하게 된다면 /usr/share/... 혹은 별도 운영 관리자가 설정한 디렉터리 내에 존재할 것이며, 단순 yum 등의 패키지 매니저를 통해 간단하게 설치하였을 경우 /etc/httpd/conf 디렉터리 내에 httpd.conf 파일에서 설정할 수 있을 것이다.

 

conf.d 파일 내에서 별도의 log.conf 등의 파일을 만들어서 관리해도 되고, httpd.conf 파일에서 관리해도 무방하다.

 

Apache는 Module 기반으로 동작하기 때문에 특정 기능을 사용하기 위해서는 1) Module을 Load하고, 2) 정의된 설정 값을 기입해주어야 한다.

 

httpd.conf 파일 내부에서 확인해보자.

 

공식 문서를 보면 잘 정리되어 있다.

 

Ref : https://httpd.apache.org/docs/2.4/ko/logs.html

 

Apache의 httpd.conf 파일 중 Log와 관련된 부분이다.

 

각각의 설정값들이 의미하는 바가 무엇인지 확인해보자.

 

ErrorLog : 에러 로그를 어디에 저장할 것인지를 나타내는 지시어이며, 아래에서 볼 수 있듯이 Default는 logs/error_log란 파일에 에러 로그를 저장하게 된다.

 

<IfModule log_config_module>

: 서버가 시작할때와 꺼질때만 처리되며, 시작할때 상태가 참이면 (log_config 모듈이 Load 되었을 경우) 안에 있는 지시어(LogFormat, CustomLog, ..)가 모든 요청에 적용된다.

 

LogFormat 지시어를 사용하여 어떤 Log 포맷을 사용할 것인지 지정하며, " "가 끝난 이후, 맨 뒤에는 Alias(별칭)을 지정하여 추후 CustomLog 지시어에서 특정 Alias의 로그 포맷을 사용할 것을 지정할 수 있다.

 

<IfModule logio_module>

Ref : https://httpd.apache.org/docs/2.4/ko/mod/mod_logio.html

요청 당 입출력 바이트수를 기록하고 싶으면 logio 모듈을 사용할 수 있을 것이다.

 

이 모듈을 사용하려면 mod_log_config이 필요하기 때문에 log_config 모듈 내부에 포함되어 있는 것이다.

⇒ log_config 모듈이 참이고, logio 모듈이 참일 경우

 

 

그럼, Client의 IP를 Access Log에 보이게 하는 방법은 어떻게 할 수 있을까?

 

Ref : https://aws.amazon.com/ko/premiumsupport/knowledge-center/elb-capture-client-ip-addresses/

 

Client의 IP를 찍히게 하기 위해서는 X-Forwarded-For 헤더에 있는 Client IP를 Access Log에 찍힐 수 있도록 로그 포맷을 적절히 변경해주어야 한다.

 

LogFormat 지시어에 %{X-Forwarded-For}i를 추가해줘야 함!

%{헤더명}i : 요청에 포함된 헤더의 값

⇒ 요청에 포함된 헤더 중 LB를 경유하여 Apache 웹 서버에 접근하기 때문에 헤더 중 X-Forwarded-For 헤더를 포함하여 전달하기 때문

 

 

1. LogFormat 변경 전

⇒ Client의 IP가 찍히지 않고 있다. 이는, Client는 일반적으로 Proxy 형태로 전달되기 위해 로드 밸런서를 경유하기 때문에 LB의 IP가 찍히게 된다.

 

(참고로, 앞단에 CLB가 존재한다.)

 

2. LogFormat 변경 후

combined란 별칭을 가진 로그 포맷에 X-Forwarded-for을 추가해주었다.

 

아래 CustomLog에는 combined 별칭을 가진 로그 포맷을 따라갈 것이다.

수정해준 뒤 httpd 데몬을 재시작해줘야 함.

 

HTTPD 데몬을 재시작 한 뒤로 GET 요청을 날릴 때 Client의 IP가 보이게 된다.

 

 

로그 포맷 주요 항목

참고 : https://araikuma.tistory.com/801

 

 

참고 문헌: https://aws.amazon.com/ko/premiumsupport/knowledge-center/elb-capture-client-ip-addresses/

 

이는 ALB / CLB에서 Apache가 타겟일 경우 설정하는 방법이며, Nginx 또한 위 참고 문헌에서 확인할 수 있다. 방법은 아파치와 유사하게 간단하게 설정할 수 있음.

 

 

 

 

 

 

 

 

 

 

 

반응형