|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head>
|
|
Packit |
90a5c9 |
<meta content="text/html; charset=EUC-KR" http-equiv="Content-Type" />
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit |
90a5c9 |
This file is generated from xml source: DO NOT EDIT
|
|
Packit |
90a5c9 |
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
|
Packit |
90a5c9 |
-->
|
|
Packit |
90a5c9 |
<title>로그파일 - Apache HTTP Server Version 2.4</title>
|
|
Packit |
90a5c9 |
<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
|
|
Packit |
90a5c9 |
<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
|
|
Packit |
90a5c9 |
<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="./style/css/prettify.css" />
|
|
Packit |
90a5c9 |
<script src="./style/scripts/prettify.min.js" type="text/javascript">
|
|
Packit |
90a5c9 |
</script>
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
<link href="./images/favicon.ico" rel="shortcut icon" /></head>
|
|
Packit |
90a5c9 |
<body id="manual-page">
|
|
Packit |
90a5c9 |
모듈 | 지시어들 | FAQ | 용어 | 사이트맵
|
|
Packit |
90a5c9 |
Apache HTTP Server Version 2.4
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
Apache > HTTP Server > Documentation > Version 2.4
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
가능한 언어: en |
|
|
Packit |
90a5c9 |
fr |
|
|
Packit |
90a5c9 |
ja |
|
|
Packit |
90a5c9 |
ko |
|
|
Packit |
90a5c9 |
tr
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
이 문서는 최신판 번역이 아닙니다.
|
|
Packit |
90a5c9 |
최근에 변경된 내용은 영어 문서를 참고하세요.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
효율적으로 웹서버를 관리하려면 발생하는 문제와 함께 서버의
|
|
Packit |
90a5c9 |
활동과 성능에 대해 알아야 한다. 아파치 웹서버는 매우 종합적이고
|
|
Packit |
90a5c9 |
유연한 로그 기능을 제공한다. 이 문서는 로그 기능을 설정하는
|
|
Packit |
90a5c9 |
방법과 로그에 들어갈 내용을 설명한다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
오류 로그 (Error Log)
|
|
Packit |
90a5c9 |
접근 로그 (Access Log)
|
|
Packit |
90a5c9 |
로그 순환 (Log Rotation)
|
|
Packit |
90a5c9 |
로그를 파이프로 보내기
|
|
Packit |
90a5c9 |
가상호스트
|
|
Packit |
90a5c9 |
다른 로그파일
|
|
Packit |
90a5c9 |
참고
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
누군가에게 아파치의 로그파일이 있는 디렉토리에 쓰기권한이
|
|
Packit |
90a5c9 |
있다면 (보통 root) 서버를 실행하는 uid를 거의 확실히 얻을
|
|
Packit |
90a5c9 |
수 있다. 이를 고려하지않고 로그가 저장된 디렉토리에 쓰기권한을
|
|
Packit |
90a5c9 |
주지 마라. 자세한 내용은 보안 팁 문서를 참고하라.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
또, 클라이언트가 제공한 정보는 로그파일에 거의 그대로
|
|
Packit |
90a5c9 |
기록된다. 그래서 악의가 있는 클라이언트가 로그파일에 제어문자를
|
|
Packit |
90a5c9 |
넣을 수 있으므로, 로그를 다룰때는 주의해야 한다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
ErrorLog 지시어는
|
|
Packit |
90a5c9 |
가장 중요한 로그파일인 서버 오류 로그의 이름과 위치를 지정한다.
|
|
Packit |
90a5c9 |
아파치 웹서버는 이 파일에 진단정보와 요청을 처리하는 도중
|
|
Packit |
90a5c9 |
발생한 오류를 기록한다. 서버가 시작하거나 동작하는데 문제가
|
|
Packit |
90a5c9 |
있다면 무엇이 잘못되었고 때때로 어떻게 고치는지를 알려주는
|
|
Packit |
90a5c9 |
이곳을 가장 먼저 살펴봐야 한다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
오류 로그는 보통 (전형적으로 유닉스 시스템에서는
|
|
Packit |
90a5c9 |
error_log , 윈도우즈와 OS/2에서는
|
|
Packit |
90a5c9 |
error.log ) 파일에 기록된다. 유닉스 시스템에서
|
|
Packit |
90a5c9 |
서버는 오류를 syslog 나 파이프를
|
|
Packit |
90a5c9 |
사용하여 다른 프로그램으로 보낼 수도 있다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
오류 로그의 형식은 상대적으로 자유롭고 자세하다. 그러나
|
|
Packit |
90a5c9 |
대부분의 오류 로그 항목에 공통적으로 나오는 정보가 있다.
|
|
Packit |
90a5c9 |
예를 들어, 항목은 보통 다음과 같다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
[Wed Oct 11 14:32:52 2000] [error] [client 127.0.0.1]
|
|
Packit |
90a5c9 |
client denied by server configuration:
|
|
Packit |
90a5c9 |
/export/home/live/ap/htdocs/test
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
로그 항목에서 첫번째 항목은 날짜와 시간이다. 두번째
|
|
Packit |
90a5c9 |
항목은 보고하는 오류의 심각성을 나타낸다. LogLevel 지시어로 오류 로그에
|
|
Packit |
90a5c9 |
기록되는 오류의 심각성을 제한할 수 있다. 세번째 항목은
|
|
Packit |
90a5c9 |
오류를 발생한 클라이언트의 IP 주소이다. 이 다음부터 오류문이
|
|
Packit |
90a5c9 |
나오며, 이 경우 서버가 클라이언트의 접근을 거부하도록
|
|
Packit |
90a5c9 |
설정되었다고 나와있다. 요청한 문서의 (웹 경로가 아닌)
|
|
Packit |
90a5c9 |
파일시스템 경로도 보인다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
오류 로그에는 매우 다양한 종류의 문구가 나올 수 있다.
|
|
Packit |
90a5c9 |
대부분은 위와 비슷하다. CGI 스크립트의 디버깅 출력도 오류
|
|
Packit |
90a5c9 |
로그에 기록된다. CGI 스크립트가 stderr 에 쓴
|
|
Packit |
90a5c9 |
정보는 그대로 오류 로그로 복사된다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
오류 로그에 정보를 추가하가나 생략할 수 없다. 그러나
|
|
Packit |
90a5c9 |
요청에 대한 오류 로그의 경우 접근
|
|
Packit |
90a5c9 |
로그에도 대응하는 항목이 생긴다. 예를 들어, 위의 경우
|
|
Packit |
90a5c9 |
상태코드가 403인 접근 로그 항목이 생긴다. 접근 로그는
|
|
Packit |
90a5c9 |
사용자정의할 수 있으므로 이 파일을 참고하여 오류 상황에
|
|
Packit |
90a5c9 |
대한 추가정보를 얻을 수 있다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
검사할때 어떤 문제가 생기는지 오류 로그를 계속 살펴보는
|
|
Packit |
90a5c9 |
것이 좋다. 유닉스 시스템에서 다음과 같이 한다:
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
tail -f error_log
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
서버 접근 로그는 서버가 처리하는 모든 요청을 기록한다.
|
|
Packit |
90a5c9 |
CustomLog
|
|
Packit |
90a5c9 |
지시어는 접근 로그의 위치와 내용을 지정한다. LogFormat 지시어를
|
|
Packit |
90a5c9 |
사용하여 로그에 포함할 내용을 쉽게 선택할 수 있다. 이 절은
|
|
Packit |
90a5c9 |
서버가 접근 로그에 쓸 내용을 설정하는 방법을 설명한다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
물론 접근 로그에 정보를 기록하는 것은 로그 관리의 시작일
|
|
Packit |
90a5c9 |
뿐이다. 다음 단계는 이 정보를 분석하여 유용한 통계를 만드는
|
|
Packit |
90a5c9 |
것이다. 이 문서는 일반적인 로그 분석에 대해서 다루지 않으며,
|
|
Packit |
90a5c9 |
로그 분석은 실제 웹서버가 할 일이 아니다. 로그 분석에 대한
|
|
Packit |
90a5c9 |
정보와 로그를 분석하는 소프트웨어에 대해서는 Open Directory나
|
|
Packit |
90a5c9 |
참고하라.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
아파치 웹서버는 이전부터 mod_log_referer, mod_log_agent,
|
|
Packit |
90a5c9 |
CustomLog
|
|
Packit |
90a5c9 |
같은 모듈과 지시어를 사용하여 접근 로그를 다루었다. 지금은
|
|
Packit |
90a5c9 |
CustomLog
|
|
Packit |
90a5c9 |
지시어가 오래된 지시어들의 모든 기능을 이어받았다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
접근 로그의 형식은 매우 사용자정의 가능하다. 형식은 C의
|
|
Packit |
90a5c9 |
printf(1) 형식문자열과 매우 유사한 형식문자열을 사용하여
|
|
Packit |
90a5c9 |
지정한다. 다음 절에 예를 들었다. 형식문자열에 사용가능한
|
|
Packit |
90a5c9 |
모든 내용을 알려면 mod_log_config 형식문자열을
|
|
Packit |
90a5c9 |
참고하라.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
접근 로그의 전형적인 설정은 다음과 같다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
LogFormat "%h %l %u %t \"%r\" %>s %b" common
|
|
Packit |
90a5c9 |
CustomLog logs/access_log common
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
그러면 지정한 로그 형식문자열을 별명
|
|
Packit |
90a5c9 |
common 으로 정의한다. 형식문자열은 퍼센트
|
|
Packit |
90a5c9 |
지시어들로 구성되며, 각각은 어떤 정보를 기록할지 알린다.
|
|
Packit |
90a5c9 |
형식문자열에 일반 문자를 적으면 그대로 로그에 출력된다.
|
|
Packit |
90a5c9 |
따옴표 문자(" )를 출력하고 싶다면 백슬래쉬를
|
|
Packit |
90a5c9 |
앞에 붙여서 형식문자열의 끝이 아님을 표시한다. 형식문자열에
|
|
Packit |
90a5c9 |
줄바꿈 "\n ", 탭 "\t "와 같은
|
|
Packit |
90a5c9 |
특수 조절문자를 사용할 수 있다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
CustomLog
|
|
Packit |
90a5c9 |
지시어는 정의한 별명을 사용하는 새로운 로그파일을
|
|
Packit |
90a5c9 |
만든다. 접근 로그의 파일명이 슬래쉬로 시작하지않으면
|
|
Packit |
90a5c9 |
ServerRoot 의 상대경로이다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
앞의 설정은 공통로그형식(Common Log Format, CLF)이라는
|
|
Packit |
90a5c9 |
형식으로 로그 항목을 기록한다. 여러 다른 웹서버들도 이런
|
|
Packit |
90a5c9 |
표준 형식으로 로그를 만들며, 여러 로그 분석 프로그램에서
|
|
Packit |
90a5c9 |
읽을 수 있다. CLF로 만든 로그파일 항목은 다음과 같다:
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET
|
|
Packit |
90a5c9 |
/apache_pb.gif HTTP/1.0" 200 2326
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
이제 로그 항목의 각 부분을 설명한다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
127.0.0.1 (%h )
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
서버에 요청을 한 클라이언트(원격 호스트)의 IP
|
|
Packit |
90a5c9 |
주소이다. HostnameLookups 가
|
|
Packit |
90a5c9 |
On 이라면 호스트명을 찾아서 IP 주소 자리에
|
|
Packit |
90a5c9 |
대신 쓴다. 그러나 이 설정은 서버를 매우 느리게 할 수
|
|
Packit |
90a5c9 |
있으므로 추천하지 않는다. 호스트명을 알려면 대신 나중에
|
|
Packit |
90a5c9 |
logresolve와
|
|
Packit |
90a5c9 |
같은 로그를 처리하는 프로그램을 사용하는 것이 좋다.
|
|
Packit |
90a5c9 |
여기에 나온 IP 주소는 사용자가 사용하는 컴퓨터 주소가
|
|
Packit |
90a5c9 |
아닐 수 있다. 프록시 서버가 사용자와 서버사이에 존재한다면,
|
|
Packit |
90a5c9 |
원래 컴퓨터 주소가 아니라 프록시의 주소가 기록될 것이다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
- (%l )
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
출력에서 "빼기기호"는 요청한 정보가 없음을 나타낸다.
|
|
Packit |
90a5c9 |
이 경우 여기에 나올 정보는 클라이언트 컴퓨터의
|
|
Packit |
90a5c9 |
identd 가 제공할 클라이언트의 RFC 1413
|
|
Packit |
90a5c9 |
신원이다. 이 정보는 매우 믿을 수 없기때문에, 긴밀히
|
|
Packit |
90a5c9 |
관리되는 내부 네트웍이 아니라면 절대로 이 정보를 사용하면
|
|
Packit |
90a5c9 |
안된다. IdentityCheck 가
|
|
Packit |
90a5c9 |
On 이 아니라면 아파치 웹서버는 이 정보를
|
|
Packit |
90a5c9 |
알아보려고 시도하지도 않는다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
frank (%u )
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
이는 HTTP 인증으로 알아낸 문서를 요청한 사용자의
|
|
Packit |
90a5c9 |
userid이다. 보통 이 값은 CGI 스크립트에게
|
|
Packit |
90a5c9 |
REMOTE_USER 환경변수로 넘겨진다. 요청의
|
|
Packit |
90a5c9 |
상태코드가 401이라면 (아래 참고) 사용자가 아직 인증을
|
|
Packit |
90a5c9 |
거치지 않았으므로 이 값을 믿으면 안된다. 문서를 암호로
|
|
Packit |
90a5c9 |
보호하지 않는다면 이 항목은 이전 항목과 같이
|
|
Packit |
90a5c9 |
"- "이다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
[10/Oct/2000:13:55:36 -0700]
|
|
Packit |
90a5c9 |
(%t )
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
서버가 요청처리를 마친 시간.
|
|
Packit |
90a5c9 |
형식은:
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
[day/month/year:hour:minute:second zone]
|
|
Packit |
90a5c9 |
day = 숫자 2개
|
|
Packit |
90a5c9 |
month = 숫자 3개
|
|
Packit |
90a5c9 |
year = 숫자 4개
|
|
Packit |
90a5c9 |
hour = 숫자 2개
|
|
Packit |
90a5c9 |
minute = 숫자 2개
|
|
Packit |
90a5c9 |
second = 숫자 2개
|
|
Packit |
90a5c9 |
zone = (`+' | `-') 숫자 4개
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
로그 형식문자열에 %{format}t 를 사용하여
|
|
Packit |
90a5c9 |
다른 형식으로 시간을 출력할 수 있다. format 은
|
|
Packit |
90a5c9 |
C 표준 라이브러리의 strftime(3) 과 같다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
"GET /apache_pb.gif HTTP/1.0"
|
|
Packit |
90a5c9 |
(\"%r\" )
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
클라이언트의 요청줄이 쌍따옴표로 묶여있다. 요청줄은
|
|
Packit |
90a5c9 |
매우 유용한 정보를 담고 있다. 첫째, 클라이언트가 사용한
|
|
Packit |
90a5c9 |
메써드는 GET 이다. 둘째, 클라이언트는 자원
|
|
Packit |
90a5c9 |
/apache_pb.gif 를 요청한다. 세번째, 클라이언트는
|
|
Packit |
90a5c9 |
HTTP/1.0 프로토콜을 사용한다. 요청줄의
|
|
Packit |
90a5c9 |
여러 부분을 따로 로그할 수도 있다. 예를 들어, 형식문자열
|
|
Packit |
90a5c9 |
"%m %U%q %H "은 "%r "과 똑같이
|
|
Packit |
90a5c9 |
메써드, 경로, 질의문자열, 프로토콜을 로그한다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
200 (%>s )
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
이는 서버가 클라이언트에게 보내는 상태코드이다. 이
|
|
Packit |
90a5c9 |
정보는 (2로 시작하는 코드) 요청이 성공하였는지, (4로
|
|
Packit |
90a5c9 |
시작하는 코드) 클라이언트에 오류가 있는지, (5로 시작하는
|
|
Packit |
90a5c9 |
코드) 서버에 오류가 있는지 알려주므로 매우 중요하다.
|
|
Packit |
90a5c9 |
상태코드의 전체 목록은 HTTP
|
|
Packit |
90a5c9 |
규약 (RFC2616 section 10)에서 찾을 수 있다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
2326 (%b )
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
마지막 항목은 응답 헤더를 제외하고 클라이언트에게
|
|
Packit |
90a5c9 |
보내는 내용의 크기를 나타낸다. 클라이언트에게 보내는
|
|
Packit |
90a5c9 |
내용이 없다면 이 값은 "- "이다. 내용이
|
|
Packit |
90a5c9 |
없는 경우 "0 "을 로그하려면 대신
|
|
Packit |
90a5c9 |
%B 를 사용한다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
자주 사용되는 다른 형식문자열은 결합된로그형식(Combined
|
|
Packit |
90a5c9 |
Log Format)이다. 다음과 같이 사용한다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\"
|
|
Packit |
90a5c9 |
\"%{User-agent}i\"" combined
|
|
Packit |
90a5c9 |
CustomLog log/access_log combined
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
이 형식은 두 항목을 더 추가한 것을 제외하고는 Common
|
|
Packit |
90a5c9 |
로그 형식과 완전히 같다. 추가된 항목들은 퍼센트 지시어
|
|
Packit |
90a5c9 |
%{header}i 를 사용한다. 여기서
|
|
Packit |
90a5c9 |
header 자리에 HTTP 요청 헤더 이름이 나올 수
|
|
Packit |
90a5c9 |
있다. 이 형식의 접근 로그는 다음과 같다:
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET
|
|
Packit |
90a5c9 |
/apache_pb.gif HTTP/1.0" 200 2326
|
|
Packit |
90a5c9 |
"http://www.example.com/start.html" "Mozilla/4.08 [en]
|
|
Packit |
90a5c9 |
(Win98; I ;Nav)"
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
추가된 항목은:
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
"http://www.example.com/start.html"
|
|
Packit |
90a5c9 |
(\"%{Referer}i\" )
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
"Referer" (맞춤법 틀리지않았음) HTTP 요청 헤더.
|
|
Packit |
90a5c9 |
클라이언트가 참조했다고 서버에게 알린 사이트이다.
|
|
Packit |
90a5c9 |
(즉, /apache_pb.gif 를 링크하였거나 포함한
|
|
Packit |
90a5c9 |
사이트이다.)
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
"Mozilla/4.08 [en] (Win98; I ;Nav)"
|
|
Packit |
90a5c9 |
(\"%{User-agent}i\" )
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
User-Agent HTTP 요청 헤더. 클라이언트 브라우저가
|
|
Packit |
90a5c9 |
자신에 대해 알리는 식별정보이다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
설정파일에 여러 CustomLog 지시어를
|
|
Packit |
90a5c9 |
사용하면 접근 로그가 여러개 만들어진다. 예를 들어, 다음
|
|
Packit |
90a5c9 |
설정은 세가지 접근 로그를 만든다. 첫번째는 기본 CLF 정보를
|
|
Packit |
90a5c9 |
기록하고, 두번째와 세번째는 referer와 브라우저 정보를
|
|
Packit |
90a5c9 |
기록한다. 마지막 두 CustomLog 줄은 어떻게
|
|
Packit |
90a5c9 |
이전 ReferLog 와 AgentLog 지시어의
|
|
Packit |
90a5c9 |
기능을 흉내낼 수 있는지 보여준다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
LogFormat "%h %l %u %t \"%r\" %>s %b" common
|
|
Packit |
90a5c9 |
CustomLog logs/access_log common
|
|
Packit |
90a5c9 |
CustomLog logs/referer_log "%{Referer}i -> %U"
|
|
Packit |
90a5c9 |
CustomLog logs/agent_log "%{User-agent}i"
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
또, 이 예는 LogFormat 으로 반드시
|
|
Packit |
90a5c9 |
별명을 정의할 필요는 없음을 보여준다. 대신 CustomLog 지시어에
|
|
Packit |
90a5c9 |
직접 로그 형식을 지정할 수 있다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
클라이언트 요청의 성격에 따라 해당 항목을 접근 로그에
|
|
Packit |
90a5c9 |
기록하지않고 싶을 때가 있다. 환경변수를
|
|
Packit |
90a5c9 |
사용하면 쉽게 해결된다. 먼저, 클라이언트가 특정 조건을
|
|
Packit |
90a5c9 |
만족하면 환경변수를 설정한다. 이 작업에는 보통 SetEnvIf 를 사용한다.
|
|
Packit |
90a5c9 |
그리고 CustomLog
|
|
Packit |
90a5c9 |
지시어에 env= 을 사용하여 환경변수 유무에
|
|
Packit |
90a5c9 |
따라 요청을 집어넣거나 뺀다. 예를 들면:
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
# loop-back 인터페이스에서 요청을 표시한다
|
|
Packit |
90a5c9 |
SetEnvIf Remote_Addr "127\.0\.0\.1" dontlog
|
|
Packit |
90a5c9 |
# robots.txt 파일에 대한 요청을 표시한다
|
|
Packit |
90a5c9 |
SetEnvIf Request_URI "^/robots\.txt$" dontlog
|
|
Packit |
90a5c9 |
# 나머지를 로그에 남긴다
|
|
Packit |
90a5c9 |
CustomLog logs/access_log common env=!dontlog
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
다른 예로 영어권 사용자의 요청만을 한 로그파일에 기록하고,
|
|
Packit |
90a5c9 |
비영어권 사용자의 요청은 다른 로그파일에 기록하는 경우를
|
|
Packit |
90a5c9 |
생각해보자.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
SetEnvIf Accept-Language "en" english
|
|
Packit |
90a5c9 |
CustomLog logs/english_log common env=english
|
|
Packit |
90a5c9 |
CustomLog logs/non_english_log common env=!english
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
조건부 로그는 매우 강력하고 유연하지만, 이것이 로그
|
|
Packit |
90a5c9 |
내용을 조절하는 유일한 방법은 아니다. 로그파일은 서버의
|
|
Packit |
90a5c9 |
모든 행동을 기록할때 더 유용하다. 나중에 원하지않는 요청을
|
|
Packit |
90a5c9 |
제외하고 로그파일을 분석하는 것이 더 쉽다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
조금 바쁜 서버조차도 로그파일에 저장되는 정보량은 매우
|
|
Packit |
90a5c9 |
많다. 접속 로그는 보통 만번 요청당 1MB 이상 증가한다. 결과적으로
|
|
Packit |
90a5c9 |
기존의 로그를 옮기거나 지우는 방법으로 로그를 주기적으로
|
|
Packit |
90a5c9 |
순활할 필요가 있다. 아파치는 파일을 열고있는 동안에는 계속
|
|
Packit |
90a5c9 |
이전 로그파일에 쓰기때문에 서버가 실행중일때 로그를 순환할
|
|
Packit |
90a5c9 |
수 없다. 대신 로그파일을 옮기거나 지운후 서버를 재시작하여, 로그파일을 새로 열어야
|
|
Packit |
90a5c9 |
한다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
점잖은 재시작을 사용하면 서버는 클라이언트와
|
|
Packit |
90a5c9 |
기존의 혹은 대기된 연결을 잃지않고 새 로그파일을 열 수 있다.
|
|
Packit |
90a5c9 |
그러나 이를 위해 서버는 오래된 요청의 서비스를 끝내는 동안
|
|
Packit |
90a5c9 |
이전 로그파일을 계속 사용해야 한다. 그러므로 재시작한후
|
|
Packit |
90a5c9 |
로그파일을 처리하기 전에 얼마간 기다릴 필요가 있다. 일반적으로
|
|
Packit |
90a5c9 |
다음과 같이 로그를 순환하고, 디스크공간을 절약하기위해 이전
|
|
Packit |
90a5c9 |
로그를 압축한다:
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
mv access_log access_log.old
|
|
Packit |
90a5c9 |
mv error_log error_log.old
|
|
Packit |
90a5c9 |
apachectl graceful
|
|
Packit |
90a5c9 |
sleep 600
|
|
Packit |
90a5c9 |
gzip access_log.old error_log.old
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
로그를 순환하는 다른 방법은 다음 절에서 설명할 파이프 로그를 사용하는 것이다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
아파치 웹서버는 오류 로그와 접근 로그를 파일에 직접
|
|
Packit |
90a5c9 |
쓰지않고 파이프를 통해 다른 프로세스로 보낼 수 있다. 이
|
|
Packit |
90a5c9 |
기능을 사용하면 서버에 코드를 추가하지않고도 매우 유연하게
|
|
Packit |
90a5c9 |
로그를 처리할 수 있다. 로그를 파이프에 쓰기위해 파일명
|
|
Packit |
90a5c9 |
자리에 파이프문자 "| "와 뒤에 표준입력으로
|
|
Packit |
90a5c9 |
로그 항목을 읽을 실행파일명을 적으면 된다. 아파치는 서버가
|
|
Packit |
90a5c9 |
시작할때 파이프로 연결할 로그 프로세스를 시작하고, 서버가
|
|
Packit |
90a5c9 |
실행되는 동안 프로세스가 죽으면 다시 시작한다. (이 마지막
|
|
Packit |
90a5c9 |
기능때문에 우리는 이 방법을 "믿을 수 있는 파이프 로그"라고
|
|
Packit |
90a5c9 |
부른다.)
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
파이프로 연결된 로그 프로세스는 부모 아파치 httpd 프로세스가
|
|
Packit |
90a5c9 |
띄우고, 프로세스의 userid도 같다. 즉, 파이프로 연결된 로그
|
|
Packit |
90a5c9 |
프로그램은 보통 root로 실행된다. 그러므로 프로그램을 간단하고
|
|
Packit |
90a5c9 |
안전하게 만드는 것이 매우 중요하다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
파이프로 부르는 전체 명령어를 따옴표로 묶음을 명심하라.
|
|
Packit |
90a5c9 |
이 예는 접근 로그에 대한 것이지만, 오류 로그도 마찬가지다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
서버를 재시작하지않고 로그를 순환할 수 있는 것이 파이프
|
|
Packit |
90a5c9 |
로그를 사용하는 중요한 이유다. 아파치 웹서버는 이를 위해
|
|
Packit |
90a5c9 |
rotatelogs라는 간단한
|
|
Packit |
90a5c9 |
프로그램을 포함한다. 예를 들어 24시간마다 로그를 순환한다면:
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
CustomLog "|/usr/local/apache/bin/rotatelogs
|
|
Packit |
90a5c9 |
/var/log/access_log 86400" common
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
다른 사이트에 cronolog라는 비슷하지만
|
|
Packit |
90a5c9 |
훨씬 더 유연한 로그 순환 프로그램이 있다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
조건부 로그와 같이 파이프 로그는 매우 강력한 도구지만,
|
|
Packit |
90a5c9 |
나중에 처리하는 등의 더 간단한 방법이 가능한 경우 사용해서는
|
|
Packit |
90a5c9 |
안된다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
많은 가상호스트가 있는 서버를
|
|
Packit |
90a5c9 |
운영할때 여러가지 방법으로 로그파일을 다룰 수 있다. 먼저,
|
|
Packit |
90a5c9 |
호스트가 한개인 서버와 같이 로그를 사용할 수 있다. <VirtualHost> 섹션이
|
|
Packit |
90a5c9 |
아닌 주서버 설정에 로그 지시어를 두면 모든 요청이 같은 접근
|
|
Packit |
90a5c9 |
로그와 오류 로그로 기록된다. 이 방법은 가상호스트별로 쉽게
|
|
Packit |
90a5c9 |
통계처리를 할 수 없다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
<VirtualHost>
|
|
Packit |
90a5c9 |
섹션 안에 CustomLog 나
|
|
Packit |
90a5c9 |
ErrorLog 지시어를
|
|
Packit |
90a5c9 |
사용하면 해당 가상호스트에 대한 요청과 오류만이 지정된
|
|
Packit |
90a5c9 |
파일에 기록된다. 로그 지시어가 없는 다른 가상호스트는 계속
|
|
Packit |
90a5c9 |
주서버 로그에 로그를 기록한다. 이 방법은 가상호스트 개수가
|
|
Packit |
90a5c9 |
적을 경우 매우 유용하지만, 호스트 수가 많다면 관리하기
|
|
Packit |
90a5c9 |
힘들어진다. 또, 파일기술자가
|
|
Packit |
90a5c9 |
부족한 문제가 자주 발생한다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
접근 로그의 경우 매우 좋은 해결책이 있다. 로그 형식문자열에
|
|
Packit |
90a5c9 |
가상호스트에 대한 정보를 추가하면 모든 호스트가 같은 로그를
|
|
Packit |
90a5c9 |
사용하고, 나중에 로그를 가상호스트별로 나눌 수 있다. 예를
|
|
Packit |
90a5c9 |
들어, 다음 지시어를 봐라.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
LogFormat "%v %l %u %t \"%r\" %>s %b"
|
|
Packit |
90a5c9 |
comonvhost
|
|
Packit |
90a5c9 |
CustomLog logs/access_log comonvhost
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
%v 는 요청을 서비스하는 가상호스트 이름을
|
|
Packit |
90a5c9 |
기록한다. 나중에 split-logfile
|
|
Packit |
90a5c9 |
같은 프로그램으로 접근 로그를 가상호스별로 나눌 수 있다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
아파치 웹서버는 시작할때 logs/httpd.pid
|
|
Packit |
90a5c9 |
파일에 부모 httpd 프로세스의 process id를 저장한다. 이
|
|
Packit |
90a5c9 |
파일명은 PidFile
|
|
Packit |
90a5c9 |
지시어로 변경할 수 있다. process-id는 관리자가 부모 프로세스에
|
|
Packit |
90a5c9 |
시그널을 보내 서버를 재시작하거나 죽일때 사용한다.
|
|
Packit |
90a5c9 |
윈도우즈에서는 대신 -k 명령행옵션을 사용한다. 더 자세한
|
|
Packit |
90a5c9 |
정보는 중단과 재시작 페이지를
|
|
Packit |
90a5c9 |
참고하라.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
디버깅을 돕기위해 ScriptLog 지시어를 사용하여
|
|
Packit |
90a5c9 |
CGI 스크립트의 입력과 출력을 기록할 수 있다. 이 지시어는
|
|
Packit |
90a5c9 |
오직 테스트용으로만 사용해야 한다. 실제 사용하는 서버에서
|
|
Packit |
90a5c9 |
사용하면 안된다. 더 자세한 정보는 mod_cgi 문서를 참고하라.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
mod_rewrite의 강력하고
|
|
Packit |
90a5c9 |
복잡한 기능을 사용한다면 디버깅을 위해 거의 항상 RewriteLog 를 사용할 필요가
|
|
Packit |
90a5c9 |
있다. 이 로그파일은 재작성 엔진이 어떻게 요청을 변환하는지에
|
|
Packit |
90a5c9 |
대해 자세히 알려준다. 자세한 정도는 RewriteLogLevel 지시어로
|
|
Packit |
90a5c9 |
조절한다.
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
|
|
Packit |
90a5c9 |
가능한 언어: en |
|
|
Packit |
90a5c9 |
fr |
|
|
Packit |
90a5c9 |
ja |
|
|
Packit |
90a5c9 |
ko |
|
|
Packit |
90a5c9 |
tr
|
|
Packit |
90a5c9 |
Notice:This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Freenode, or sent to our mailing lists.
|
|
Packit |
90a5c9 |
<script type="text/javascript">
|
|
Packit |
90a5c9 |
var comments_shortname = 'httpd';
|
|
Packit |
90a5c9 |
var comments_identifier = 'http://httpd.apache.org/docs/2.4/logs.html';
|
|
Packit |
90a5c9 |
(function(w, d) {
|
|
Packit |
90a5c9 |
if (w.location.hostname.toLowerCase() == "httpd.apache.org") {
|
|
Packit |
90a5c9 |
d.write('
|
|
Packit |
90a5c9 |
var s = d.createElement('script');
|
|
Packit |
90a5c9 |
s.type = 'text/javascript';
|
|
Packit |
90a5c9 |
s.async = true;
|
|
Packit |
90a5c9 |
s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier;
|
|
Packit |
90a5c9 |
(d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s);
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
else {
|
|
Packit |
90a5c9 |
d.write('
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
})(window, document);
|
|
Packit |
90a5c9 |
//--></script>
|
|
Packit |
90a5c9 |
Copyright 2018 The Apache Software Foundation. Licensed under the Apache License, Version 2.0.
|
|
Packit |
90a5c9 |
모듈 | 지시어들 | FAQ | 용어 | 사이트맵 <script type="text/javascript">
|
|
Packit |
90a5c9 |
if (typeof(prettyPrint) !== 'undefined') {
|
|
Packit |
90a5c9 |
prettyPrint();
|
|
Packit |
90a5c9 |
}
|
|
Packit |
90a5c9 |
//--></script>
|
|
Packit |
90a5c9 |
</body></html>
|