로그포맷과 CustomLog 지시자
Module mod_log_config 은 아파치 기본 모듈입니다.
로그 포맷 스트링
%a : 원격의 IP 주소
%b : 헤더를 포함한 전송량(bytes)
%{var}e : 환경 변수 "var"
%f : 파일이름
%h : 원격의 호스트
%{hdr}i : 서버에 들어오는(요청) 헤더 값 "hdr"
%l : 원격의 로그인 ID(지원한다면)
%{label}n : 다른 모듈에서 "label" 구성
%{hdr}o : 응답 헤더 값 "hdr"
%p : 서버의 Canonical 포트 번호
%P : 자식 프로세스 ID(PID)
%r : 첫번째 요청 라인
%s : 상태코드
%t : 시간 포맷(CLF 포맷)
%{format}t : "format"으로 구성된 시간 포맷
%T : 서버에 요청하는 시간(초)
%u : 원격의 유저이름(인증시)
%U : 요청한 URL
%v : 클라이언트 요청에 따른 Canonical 서버네임
%V : UseCanonicalName 설정에 따른 서버네임
httpd.conf 파일의 기본적인 로그 설정
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
CustomLog /usr/local/apache/logs/access_log common
로그 기록 지시자
CookieLog
CustomLog
LogFormat
TransferLog
LogFormat 지시자
Syntax: LogFormat format|nickname [nickname]
Default: LogFormat "%h %l %u %t \"%r\" %>s %b"
Context: server config, virtual host
Status: Base
Compatibility: Nickname only available in Apache 1.3 or later
Module: mod_log_config
CustomLog 지시자
Syntax: CustomLog file|pipe format|nickname [env=[!]environment-variable]
Context: server config, virtual host
Status: Base
Compatibility: Nickname only available in Apache 1.3 or later.
Conditional logging available in 1.3.5 or later.
Module: mod_log_config
TransferLog 지시자
Syntax: TransferLog file|pipe
Default: none
Context: server config, virtual host
Status: Base
Module: mod_log_config
아파치 환경변수 설정
아파치에서 환경변수를 설정하는 방법은 몇가지 있습니다.
예를 들어,
- mod_env 모듈에 의한
SetEnv
지시자 이용
- mod_setenvif 모듈에에 의한
BrowserMatch
BrowserMatchNoCase
SetEnvIf
SetEnvIfNoCase
지시자 이용
지시자 간단한 사용법
BrowserMatch 지시자
Syntax: BrowserMatch regex envar[=value] [envar[=value]] ...
Default: none
Context: server config, virtual host, directory, .htaccess
Override: FileInfo
Status: Base
Module: mod_setenvif
Compatibility: Apache 1.2 and above (in Apache 1.2 this directive was found in the
now-obsolete mod_browser module); use in .htaccess files only supported with
1.3.13 and later
SetEnvIf 지시자
Syntax: SetEnvIf attribute regex envar[=value] [envar[=value]] ...
Default: none
Context: server config, virtual host, directory, .htaccess
Override: FileInfo
Status: Base
Module: mod_setenvif
Compatibility: Apache 1.3 and above; the Request_Protocol keyword and environment-variable
matching are only available with 1.3.7 and later; use in .htaccess files only supported
with 1.3.13 and later
환경변수 지정 및 값 지정 방법
1.varname, or
2.!varname, or
3.varname=value
예 :
BrowserMatch ^Mozilla forms jpeg=yes browser=netscape
BrowserMatch "^Mozilla/[2-3]" tables agif frames javascript
BrowserMatch MSIE !javascript
BrowserMatchNoCase Robot is_a_robot
SetEnvIfNoCase User-Agent Robot is_a_robot
BrowserMatchNoCase mac platform=macintosh
BrowserMatchNoCase win platform=windows
SetEnvIf Request_URI "\.gif$" object_is_image=gif
SetEnvIf Request_URI "\.jpg$" object_is_image=jpg
SetEnvIf Request_URI "\.xbm$" object_is_image=xbm
:
SetEnvIf Referer www\.mydomain\.com intra_site_referral
:
SetEnvIf object_is_image xbm XBIT_PROCESSING=1
SetEnvIfNoCase Host Apache\.Org site=apache
SetEnvIf 지자자에서 attribute 에 올 수 있는 것들 :
Remote_Host - the hostname (if available) of the client making the request
Remote_Addr - the IP address of the client making the request
Remote_User - the authenticated username (if available)
Request_Method - the name of the method being used (GET, POST, et cetera)
Request_Protocol - the name and version of the protocol with which the request
was made (e.g., "HTTP/0.9", "HTTP/1.1", etc.)
Request_URI - the portion of the URL following the scheme and host portion
그외
Host, User-Agent, and Referer 가능
see http://www.rfc-editor.org/rfc/rfc2616.txt
따라서,
BrowserMatch와 SetEnvIf User-Agent 는 서로 동일하다는 것을 알 수 있을 겁니다.
*중요)
CustomLog 지자자와 다르게 환경변수 인자에 여러 개를 설정할 수 있음.
특정 IP 주소만 환경변수로 설정하기
- 환경변수 이름 : do_not_log
- 목적 : 이 환경변수에 해당되는 특정 IP 주소는 access_log에 기록하지 않는다.
SetEnvIf Remote_Addr "^127.0.0.1$" do_not_log
SetEnvIf Remote_Addr "^211.35.159.12[89]$" do_not_log
SetEnvIf Remote_Addr "^211.35.159.1[345][0-9]$" do_not_log
위에서 설정한 특정 IP 주소는
127.0.0.1 자기자신을 말하는 루프백 주소
211.35.159.128, 211.35.159.129 두개의 IP 주소
211.35.159.130 ~ 211.35.159.139 10개의 IP 주소
211.35.159.140 ~ 211.35.159.149 10 개의 IP 주소
211.35.159.150 ~ 211.35.159.159 10 개의 IP 주소
즉 원격의 IP 주소(Remote_Addr)가 위와 일치하면 do_not_log 환경변수에 지정하는 예임.
*참고)
^ 은 시작을 의미
$ 은 마지막을 의미
[0-9] 0~9까지의 숫자중 어느 하나
특정 타입의 파일만 환경변수로 설정하기
SetEnvIfNoCase Request_URI "\.(gif|jpg|png|css|js|java)$" do_not_log
요청 URI(Request_URI) 파일이
*.gif
*.jpg
*.png
*.css
*.js
*.java
로 끝난 파일인 경우(대소문자를 구별하지 않음) do_not_log 환경변수에 지정함
특정 User-Agent 만 환경변수로 설정하기
- 환경변수 이름 : do_not_log 과 is_a_robot
- 목적 : 이 환경변수에 해당되는 특정 User-Agent는 access_log에 기록하지 않고,
따로 로그(robot-log)에 기록하거나 기록하지 않기 위함.
BrowserMatchNoCase "ru-robot" do_not_log is_a_robot
BrowserMatchNoCase "Slurp/si" do_not_log is_a_robot
BrowserMatchNoCase "Mercator" do_not_log is_a_robot
BrowserMatchNoCase "Gulliver" do_not_log is_a_robot
BrowserMatchNoCase "SyncIT/" do_not_log is_a_robot
BrowserMatchNoCase "FAST-WebCrawler" do_not_log is_a_robot
BrowserMatchNoCase "Lycos_Spider" do_not_log is_a_robot
BrowserMatchNoCase "^ia_archive" do_not_log is_a_robot
BrowserMatchNoCase "^tv" do_not_log is_a_robot
BrowserMatchNoCase "Scooter" do_not_log is_a_robot
BrowserMatchNoCase "ZyBorg/" do_not_log is_a_robot
BrowserMatchNoCase "KIT-Fireball" do_not_log is_a_robot
BrowserMatchNoCase "Googlebot/" do_not_log is_a_robot
BrowserMatchNoCase "DIIbot/" do_not_log is_a_robot
BrowserMatchNoCase "teoma_agent3" do_not_log is_a_robot
BrowserMatchNoCase "empas_robot" do_not_log is_a_robot
각각의 정규표현식 조건에 맞는 User-Agent 인 경우, do_not_log 환경변수와
is_a_robot 이라는 두개의 환경변수에 설정한 예입니다.
is_a_robot 이라고 또 하나의 환경변수를 지정한 이유는 앞서 얘기했듯이
이 조건게 맞는 User-Agent가 접근할 경우 따로 로그에 기록하기 위함입니다.
이 BrowserMatchNoCase 지시자 대신에 SetEnvIfNoCase User-Agent 로 대신할 수 있는데
첫번째 부분을 다음과 같이 설정할 수 있습니다.(둘다 똑 같은 결과임)
SetEnvIfNoCase User-Agent "ru-robot" do_not_log is_a_robot
참고사이트
http://www.linuxchannel.net/docs/apache_log.txt
'Apache' 카테고리의 다른 글
Apache rewrite 정리 (0) | 2018.01.16 |
---|---|
아파치 서버 끊김없이 재시작 (graceful) - 무중단 재시작 (0) | 2017.11.23 |
mod_security2 설치 (0) | 2017.09.22 |
apache 버전 감추기 (0) | 2017.09.10 |
아파치 (98)Address already in use: make_sock: could not bind to address 0.0.0.0:80 에러 발생시 해결방법 (0) | 2017.09.10 |
댓글