mirror of
https://github.com/apache/httpd.git
synced 2025-05-30 01:07:09 +03:00
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@421136 13f79535-47bb-0310-9956-ffa450edef68
422 lines
16 KiB
XML
422 lines
16 KiB
XML
<?xml version="1.0" encoding="EUC-KR" ?>
|
|
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
|
|
<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
|
|
<!-- English Revision: 105989:420990 (outdated) -->
|
|
|
|
<!--
|
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
|
contributor license agreements. See the NOTICE file distributed with
|
|
this work for additional information regarding copyright ownership.
|
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
|
(the "License"); you may not use this file except in compliance with
|
|
the License. You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.
|
|
-->
|
|
|
|
<modulesynopsis metafile="mod_log_config.xml.meta">
|
|
|
|
<name>mod_log_config</name>
|
|
<description>서버로의 요청을 로그에 기록한다</description>
|
|
<status>Base</status>
|
|
<sourcefile>mod_log_config.c</sourcefile>
|
|
<identifier>log_config_module</identifier>
|
|
|
|
<summary>
|
|
<p>이 모듈은 클라이언트의 요청을 로그에 자유롭게 기록한다.
|
|
자신이 원하는 형식으로 로그를 기록할 수 있고, 파일이나 외부
|
|
프로그램에 직접 로그를 보낼 수도 있다. 조건적 로그를 사용하면
|
|
요청의 성격에 따라 요청을 로그에 추가하거나 제외할 수 있다.</p>
|
|
|
|
<p>이 모듈은 세가지 지시어를 제공한다. <directive
|
|
module="mod_log_config">TransferLog</directive>는 로그파일을
|
|
만들고, <directive module="mod_log_config">LogFormat</directive>은
|
|
원하는 형식을 정하고, <directive
|
|
module="mod_log_config">CustomLog</directive>는 한번에 로그파일과
|
|
형식을 모두 지정한다. <directive>TransferLog</directive>와
|
|
<directive>CustomLog</directive> 지시어를 여러번 사용하면
|
|
요청을 여러 파일에 기록할 수 있다.</p>
|
|
</summary>
|
|
<seealso><a href="../logs.html">아파치 로그파일</a></seealso>
|
|
|
|
<section id="formats"><title>로그 형식 지정하기</title>
|
|
|
|
<p><directive module="mod_log_config">LogFormat</directive>과
|
|
<directive module="mod_log_config">CustomLog</directive>
|
|
지시어의 형식 아규먼트는 문자열이다. 이 문자열에 따라 요청을
|
|
로그파일에 기록한다. 문자열에는 로그파일에 그대로 복사되는
|
|
문자와 행바꿈과 탭을 나타내는 C의 "\n"과 "\t" 제어문자를
|
|
사용할 수 있다. 로그파일에 따옴표나 백슬래쉬를 쓰려면 앞에
|
|
반드시 백슬래쉬를 적어줘야 한다.</p>
|
|
|
|
<p>요청의 특징은 형식 문자열에 "<code>%</code>" 지시어를
|
|
사용하여 기록한다. 이 지시어는 로그파일에서 다음과 같이
|
|
변경된다.</p>
|
|
|
|
<table border="1" style="zebra">
|
|
<columnspec><column width=".2"/><column width=".8"/></columnspec>
|
|
<tr><th>형식 문자열</th>
|
|
<th>설명</th></tr>
|
|
|
|
<tr><td><code>%%</code></td>
|
|
<td>퍼센트 기호</td></tr>
|
|
|
|
<tr><td><code>%...a</code></td>
|
|
<td>원격 IP-주소</td></tr>
|
|
|
|
<tr><td><code>%...A</code></td>
|
|
<td>(서버) IP-주소</td></tr>
|
|
|
|
<tr><td><code>%...B</code></td>
|
|
<td>HTTP 헤더를 제외한 전송 바이트수.</td></tr>
|
|
|
|
<tr><td><code>%...b</code></td>
|
|
<td>HTTP 헤더를 제외한 전송 바이트수. CLF 형식과 같이
|
|
전송한 내용이 없는 경우 0 대신 '<code>-</code>'가 나온다.</td></tr>
|
|
|
|
<tr><td><code>%...{<var>Foobar</var>}C</code></td>
|
|
<td>서버가 수신한 요청에서 <var>Foobar</var> 쿠키의
|
|
내용.</td></tr>
|
|
|
|
<tr><td><code>%...D</code></td>
|
|
<td>요청을 처리하는데 걸린 시간 (마이크로초 단위).</td></tr>
|
|
|
|
<tr><td><code>%...{<var>FOOBAR</var>}e</code></td>
|
|
<td>환경변수 <var>FOOBAR</var>의 내용</td></tr>
|
|
|
|
<tr><td><code>%...f</code></td>
|
|
<td>파일명</td></tr>
|
|
|
|
<tr><td><code>%...h</code></td>
|
|
<td>원격 호스트</td></tr>
|
|
|
|
<tr><td><code>%...H</code></td>
|
|
<td>요청 프로토콜</td></tr>
|
|
|
|
<tr><td><code>%...{<var>Foobar</var>}i</code></td>
|
|
<td>서버가 수신한 요청에서 <code><var>Foobar</var>:</code>
|
|
헤더의 내용.</td></tr>
|
|
|
|
<tr><td><code>%...l</code></td>
|
|
<td>(있다면 identd가 제공한) 원격 로그인명.
|
|
<module>mod_ident</module>가 있고 <directive
|
|
module="mod_ident">IdentityCheck</directive>가
|
|
<code>On</code>이 아니면 빼기기호를 기록한다.</td></tr>
|
|
|
|
<tr><td><code>%...m</code></td>
|
|
<td>요청 메써드</td></tr>
|
|
|
|
<tr><td><code>%...{<var>Foobar</var>}n</code></td>
|
|
<td>다른 모듈이 기록한 <var>Foobar</var> 노트(note)
|
|
내용.</td></tr>
|
|
|
|
<tr><td><code>%...{<var>Foobar</var>}o</code></td>
|
|
<td>응답의 <code><var>Foobar</var>:</code> 헤더 내용.</td></tr>
|
|
|
|
<tr><td><code>%...p</code></td>
|
|
<td>요청을 서비스하는 서버의 정규 포트</td></tr>
|
|
|
|
<tr><td><code>%...P</code></td>
|
|
<td>요청을 서비스하는 자식의 프로세스 ID.</td></tr>
|
|
|
|
<tr><td><code>%...{<var>format</var>}P</code></td>
|
|
<td>요청을 서비스하는 자식의 프로세스 ID 혹은 쓰레드
|
|
ID. format에는 <code>pid</code>와 <code>tid</code>가
|
|
가능하다.
|
|
</td></tr>
|
|
|
|
<tr><td><code>%...q</code></td>
|
|
<td>질의문자열 (질의문자열이 있다면 앞에 <code>?</code>를
|
|
붙이고, 없다면 빈 문자열)</td></tr>
|
|
|
|
<tr><td><code>%...r</code></td>
|
|
<td>요청의 첫번째 줄</td></tr>
|
|
|
|
<tr><td><code>%...s</code></td>
|
|
<td>상태(status). 내부 리다이렉션된 요청의 경우 *원래*
|
|
요청의 상태이다. 최종 요청의 상태는 <code>%...>s</code>.</td></tr>
|
|
|
|
<tr><td><code>%...t</code></td>
|
|
<td>common log format 시간 형식(표준 영어 형식)의 시간</td></tr>
|
|
|
|
<tr><td><code>%...{<var>format</var>}t</code></td>
|
|
<td><code>strftime(3)</code> 형식 format의 시간. (지역시간일
|
|
수 있음)</td></tr>
|
|
|
|
<tr><td><code>%...T</code></td>
|
|
<td>요청을 처리하는데 걸린 시간 (초 단위).</td></tr>
|
|
|
|
<tr><td><code>%...u</code></td>
|
|
<td>원격 사용자 (auth가 제공하며, 상태(<code>%s</code>)가
|
|
401인 경우 이상한 값을 나올 수 있음)</td></tr>
|
|
|
|
<tr><td><code>%...U</code></td>
|
|
<td>질의문자열을 제외한 요청 URL 경로.</td></tr>
|
|
|
|
<tr><td><code>%...v</code></td>
|
|
<td>요청을 서비스한 서버의 정규 <directive
|
|
module="core">ServerName</directive>.</td></tr>
|
|
|
|
<tr><td><code>%...V</code></td>
|
|
<td><directive module="core">UseCanonicalName</directive>
|
|
설정에 따른 서버명.</td></tr>
|
|
|
|
<tr><td><code>%...X</code></td>
|
|
<td>응답을 마쳤을때 연결 상태.
|
|
|
|
<table>
|
|
<columnspec><column width=".2"/><column width=".6"/></columnspec>
|
|
<tr><td><code>X</code> =</td>
|
|
<td>응답을 마치기 전에 연결이 끊어졌다.</td></tr>
|
|
<tr><td><code>+</code> =</td>
|
|
<td>응답을 보낸후에도 연결이 살아있다(keep alive).</td></tr>
|
|
<tr><td><code>-</code> = </td>
|
|
<td>응답을 보낸후 연결이 끊어졌다.</td></tr>
|
|
</table>
|
|
|
|
<p>(아파치 1.3 후반 버전에서 이 지시어는
|
|
<code>%...c</code>였지만, 전통적인 ssl
|
|
<code>%...{<var>var</var>}c</code> 문법과 겹쳐서
|
|
변경했다.)</p></td></tr>
|
|
|
|
<tr><td><code>%...I</code></td>
|
|
<td>요청과 헤더를 포함한 수신 바이트수로 0일 수 없다.
|
|
이를 사용하려면 <module>mod_logio</module>가 필요하다.</td></tr>
|
|
|
|
<tr><td><code>%...O</code></td>
|
|
<td>헤더를 포함한 송신 바이트수로 0일 수 없다. 이를
|
|
사용하려면 <module>mod_logio</module>가 필요하다.</td></tr>
|
|
</table>
|
|
|
|
<p>"<var>...</var>"에는 (<em>예를 들어</em>,
|
|
<code>"%h %u %r %s %b"</code>) 아무것도 없거나, 항목을 포함할
|
|
조건이 나온다 (조건을 만족하지 않으면 자리에 "-"를 기록한다).
|
|
조건은 앞에 "!"를 붙이거나 안붙인 HTTP 상태코드 목록으로
|
|
작성한다. 예를 들어, "%400,501{User-agent}i"는 400 (Bad
|
|
Request) 오류와 501 (Not Implemented) 오류일때만
|
|
<code>User-agent:</code>를 로그에 남기고,
|
|
"%!200,304,302{Referer}i"는 정상적인 상태가 <em>아닌</em>
|
|
모든 요청에 대해 <code>Referer:</code>를 로그에 남긴다.</p>
|
|
|
|
<p>수정자 "<"와 ">"는 내부 리다이렉션된 요청에서 각각
|
|
처음 요청을 말할지 마지막 요청을 말할지 선택한다. 기본적으로
|
|
<code>%s, %U, %T, %D, %r</code>은 처음 요청을 보고, 나머지
|
|
<code>%</code> 지시어는 마지막 요청을 본다. 그래서
|
|
<code>%>s</code>는 요청의 마지막 상태(status)를 기록하고,
|
|
<code>%<u</code>는 인증으로 보호하지 않는 자원으로 내부
|
|
라다이렉션된 경우에도 처음에 인증한 사용자를 기록한다.</p>
|
|
|
|
<p>2.0.46 이전의 httpd 2.0 버전은 <code>%...r</code>,
|
|
<code>%...i</code>, <code>%...o</code>의 결과 문자열을 그대로
|
|
두었다. 이유는 Common Log Format의 요구사항을 따르기위해서였다.
|
|
즉, 클라이언트가 제어문자를 로그에 집어넣을 수 있기때문에
|
|
로그파일을 그대로 다룰 때는 조심해야 한다.</p>
|
|
|
|
<p>보안상 이유로 2.0.46부터 출력할 수 없는 문자나 다른 특수문자를
|
|
<code>\x<var>hh</var></code>로 표현한다. 여기서 <var>hh</var>는
|
|
해당 바이트의 16진수 표현을 나타낸다. 이 규칙의 예외는 백슬래쉬를
|
|
앞에 붙이는 <code>"</code>와 <code>\</code>, 그리고 C언어
|
|
형식의 공백문자들(<code>\n</code>, <code>\t</code> 등)이다.</p>
|
|
|
|
<p>일반적으로 많이 사용하는 로그 형식은 다음과 같다.</p>
|
|
|
|
<dl>
|
|
<dt>Common Log Format (CLF)</dt>
|
|
<dd><code>"%h %l %u %t \"%r\" %>s %b"</code></dd>
|
|
|
|
<dt>가상호스트 정보를 포함한 Common Log Format</dt>
|
|
<dd><code>"%v %h %l %u %t \"%r\" %>s %b"</code></dd>
|
|
|
|
<dt>NCSA extended/combined 로그 형식</dt>
|
|
<dd><code>"%h %l %u %t \"%r\" %>s %b \"%{Referer}i\"
|
|
\"%{User-agent}i\""</code></dd>
|
|
|
|
<dt>Referer 로그 형식</dt>
|
|
<dd><code>"%{Referer}i -> %U"</code></dd>
|
|
|
|
<dt>Agent (브라우저) 로그 형식</dt>
|
|
<dd><code>"%{User-agent}i"</code></dd>
|
|
</dl>
|
|
|
|
<p>요청을 서비스하는 서버의 정규 <directive
|
|
module="core">ServerName</directive>과 <directive
|
|
module="mpm_common">Listen</directive>은 각각 <code>%v</code>와
|
|
<code>%p</code>를 사용한다. 로그분석 프로그램이 실제로 요청을
|
|
서비스하는 호스트를 알기위해 가상호스트 찾기 알고리즘을
|
|
가질 필요없도록 이들 값은 <directive
|
|
module="core">UseCanonicalName</directive> 설정과 무관하다.</p>
|
|
</section>
|
|
|
|
<section id="security"><title>보안상 고려할 점</title>
|
|
<p>서버를 시작하는 사용자외에 다른 사용자가 로그파일을 저장하는
|
|
디렉토리에 쓰기 권한을 가질때 왜 보안에 문제가 생기는지
|
|
<a href="../misc/security_tips.html#serverroot">보안 팁</a>
|
|
문서를 참고하라.</p>
|
|
</section>
|
|
|
|
<directivesynopsis>
|
|
<name>CookieLog</name>
|
|
<description>쿠키를 로그에 남기기위해 사용할 파일명을 설정한다</description>
|
|
<syntax>CookieLog <var>filename</var></syntax>
|
|
<contextlist><context>server config</context><context>virtual host</context>
|
|
</contextlist>
|
|
<compatibility>이 지시어는 사용되지 않는다.</compatibility>
|
|
|
|
<usage>
|
|
<p><directive>CookieLog</directive> 지시어는 쿠키를 로그에
|
|
남기기위해 사용할 파일명을 설정한다. 파일명은 <directive
|
|
module="core">ServerRoot</directive>에 상대경로이다. 이
|
|
지시어는 <code>mod_cookies</code>와 호환을 위해 포함했을뿐,
|
|
실제 사용되지 않는다.</p>
|
|
</usage>
|
|
</directivesynopsis>
|
|
|
|
<directivesynopsis>
|
|
<name>CustomLog</name>
|
|
<description>로그파일 이름과 형식을 지정한다</description>
|
|
<syntax>CustomLog <var>file</var>|<var>pipe</var>
|
|
<var>format</var>|<var>nickname</var>
|
|
[env=[!]<var>environment-variable</var>]</syntax>
|
|
<contextlist><context>server config</context><context>virtual host</context>
|
|
</contextlist>
|
|
|
|
<usage>
|
|
<p>서버가 요청을 로그에 남길때 <directive>CustomLog</directive>
|
|
지시어를 사용한다. 로그 형식을 지정하고, 환경변수를 사용하여
|
|
요청의 특징에 따라 선택적으로 로그를 남길 수도 있다.</p>
|
|
|
|
<p>로그를 기록할 장소를 지정하는 첫번째 아규먼트에는 다음
|
|
둘중 하나를 사용한다.</p>
|
|
|
|
<dl>
|
|
<dt><var>file</var></dt>
|
|
<dd><directive module="core">ServerRoot</directive>에
|
|
상대적인 파일명.</dd>
|
|
|
|
<dt><var>pipe</var></dt>
|
|
<dd>파이프문자 "<code>|</code>"뒤에 로그 정보를 표준입력으로
|
|
받을 프로그램 경로를 적는다.
|
|
|
|
<note type="warning"><title>보안:</title>
|
|
<p>프로그램을 사용한다면 프로그램은 웹서버를 시작한 사용자
|
|
권한으로 실행된다. 서버를 root로 시작한다면 프로그램도
|
|
root로 실행하므로 프로그램이 안전한지 확인하라.</p>
|
|
</note>
|
|
<note type="warning"><title>주의</title>
|
|
<p>유닉스가 아닌 플래폼에서 파일경로를 입력할때 플래폼이
|
|
백슬래쉬를 사용하더라도 반드시 슬래쉬를 사용해야 한다.
|
|
일반적으로 설정파일에서는 항상 슬래쉬를 사용하는 것이
|
|
좋다.</p>
|
|
</note></dd>
|
|
</dl>
|
|
|
|
<p>두번째 아규먼트는 로그파일에 기록할 내용을 지정한다.
|
|
전에 <directive module="mod_log_config">LogFormat</directive>으로
|
|
정의한 <var>nickname</var>을 사용하거나 직접 <a
|
|
href="#formats">로그 형식</a> 절에서 설명한 <var>format</var>
|
|
문자열을 사용할 수 있다.</p>
|
|
|
|
<p>예를 들어, 다음 두 지시어는 똑같은 일을 한다.</p>
|
|
|
|
<example>
|
|
# 형식 별칭을 사용한 CustomLog<br />
|
|
LogFormat "%h %l %u %t \"%r\" %>s %b" common<br />
|
|
CustomLog logs/access_log common<br />
|
|
<br />
|
|
# 직접 형식 문자열을 사용한 CustomLog<br />
|
|
CustomLog logs/access_log "%h %l %u %t \"%r\" %>s %b"
|
|
</example>
|
|
|
|
<p>세번째 아규먼트는 없어도 되며, 특정 서버 환경변수 유무에
|
|
따라 요청을 로그에 기록할지 여부를 결정한다. 요청에 지정한
|
|
<a href="../env.html">환경변수</a>가 정의되있다면 (혹은
|
|
'<code>env=!<var>name</var></code>'를 사용한 경우 없다면)
|
|
요청을 로그에 기록한다.</p>
|
|
|
|
<p><module>mod_setenvif</module>나 <module>mod_rewrite</module>
|
|
모듈을 사용하여 요청별로 환경변수를 설정할 수 있다. 예를
|
|
들어, 서버가 GIF 그림에 대한 모든 요청을 주서버 로그가 아닌
|
|
다른 로그파일에 기록하려면,</p>
|
|
|
|
<example>
|
|
SetEnvIf Request_URI \.gif$ gif-image<br />
|
|
CustomLog gif-requests.log common env=gif-image<br />
|
|
CustomLog nongif-requests.log common env=!gif-image
|
|
</example>
|
|
</usage>
|
|
</directivesynopsis>
|
|
|
|
<directivesynopsis>
|
|
<name>LogFormat</name>
|
|
<description>로그파일에 사용할 형식을 기술한다</description>
|
|
<syntax>LogFormat <var>format</var>|<var>nickname</var>
|
|
[<var>nickname</var>]</syntax>
|
|
<default>LogFormat "%h %l %u %t \"%r\" %>s %b"</default>
|
|
<contextlist><context>server config</context><context>virtual host</context>
|
|
</contextlist>
|
|
|
|
<usage>
|
|
<p>이 지시어는 접근 로그파일의 형식을 지정한다.</p>
|
|
|
|
<p><directive>LogFormat</directive> 지시어는 두가지 형식으로
|
|
사용한다. 첫번째 형식은 아규먼트를 한개만 사용하여 다음
|
|
<directive>TransferLog</directive> 지시어들이 사용할 로그
|
|
형식을 지정한다. 이 아규먼트에 위의 <a href="#formats">로그
|
|
형식 지정하기</a> 절에서 설명한 <var>format</var>을 직접
|
|
사용하거나, 다음에 설명할 <directive>LogFormat</directive>
|
|
지시어로 미리 정의한 (로그 형식을 지칭하는) <var>nickname</var>을
|
|
사용할 수 있다.</p>
|
|
|
|
<p><directive>LogFormat</directive> 지시어의 두번째 형식은
|
|
<var>format</var>과 <var>nickname</var>을 연결한다. 그러면
|
|
뒤에서 사용하는 <directive>LogFormat</directive>이나 <directive
|
|
module="mod_log_config">CustomLog</directive> 지시어에 반복해서
|
|
형식 문자열을 모두 입력하는 대신 <var>nickname</var>을 사용할
|
|
수 있다. 별칭을 정의하는 <directive>LogFormat</directive>
|
|
지시어는 <strong>이 외에는 아무 기능을 하지 않는다</strong>.
|
|
즉, 별칭<em>만</em>을 정의하며, 실제로 형식을 적용하거나
|
|
형식을 기본값으로 만들지 않는다. 그러므로 다음에 나오는
|
|
<directive module="mod_log_config">TransferLog</directive>
|
|
지시어에 영향을 주지 않는다. 또,
|
|
<directive>LogFormat</directive>은 별칭으로 다른 별칭을
|
|
정의할 수 있다. 별칭 이름에는 퍼센트 기호(<code>%</code>)를
|
|
사용할 수 없음을 주의하라.</p>
|
|
|
|
<example><title>예제</title>
|
|
LogFormat "%v %h %l %u %t \"%r\" %>s %b" vhost_common
|
|
</example>
|
|
</usage>
|
|
</directivesynopsis>
|
|
|
|
<directivesynopsis>
|
|
<name>TransferLog</name>
|
|
<description>로그파일 위치를 설정한다</description>
|
|
<syntax>TransferLog <var>file</var>|<var>pipe</var></syntax>
|
|
<contextlist><context>server config</context><context>virtual host</context>
|
|
</contextlist>
|
|
|
|
<usage>
|
|
<p>이 지시어는 <directive
|
|
module="mod_log_config">CustomLog</directive> 지시어와 아규먼트와
|
|
기능이 비슷하지만, 로그 형식을 직접 지정하거나 요청을 조건에
|
|
따라 로그에 남길 수 없다. 대신 가장 최근 사용한 (별칭을
|
|
정의하지 않은) <directive
|
|
module="mod_log_config">LogFormat</directive> 지시어가 지정한
|
|
로그 형식을 사용한다. 미리 형식을 지정하지 않았다면 Common
|
|
Log Format을 사용한다.</p>
|
|
|
|
<example><title>예제</title>
|
|
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\""<br />
|
|
TransferLog logs/access_log
|
|
</example>
|
|
</usage>
|
|
</directivesynopsis>
|
|
|
|
</modulesynopsis>
|