mirror of
https://github.com/apache/httpd.git
synced 2025-04-18 22:24:07 +03:00
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1588219 13f79535-47bb-0310-9956-ffa450edef68
304 lines
12 KiB
XML
304 lines
12 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: 395228:1584572 (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_isapi.xml.meta">
|
|
|
|
<name>mod_isapi</name>
|
|
<description>Windows용 아파치에서 ISAPI Extension 사용</description>
|
|
<status>Base</status>
|
|
<sourcefile>mod_isapi.c</sourcefile>
|
|
<identifier>isapi_module</identifier>
|
|
<compatibility>Win32 only</compatibility>
|
|
|
|
<summary>
|
|
<p>이 모듈은 Internet Server extension API를 구현한다. 그래서
|
|
제약은 있지만 Windows용 아파치에서 Internet Server extension을
|
|
(<em>즉,</em> ISAPI .dll 모듈) 사용할 수 있다.</p>
|
|
|
|
<p>ISAPI extension 모듈(.dll 파일)은 제삼자가 작성한다.
|
|
Apache Group이 이들 모듈을 만들지 않았으며, 지원도 하지
|
|
않는다. ISAPI extension 사용에 관한 문제는 ISAPI 제작자에게
|
|
직접 연락하길 바란다. <strong>제발 이런 문제를 아파치
|
|
메일링리스트나 버그보고 페이지에 올리지 <em>마라</em>.</strong></p>
|
|
</summary>
|
|
|
|
<section id="usage"><title>사용법</title>
|
|
|
|
<p>서버설정파일에서 <directive
|
|
module="mod_mime">AddHandler</directive> 지시어를 사용하여
|
|
ISAPI 파일 확장자와 <code>isapi-handler</code> 핸들러를 연결한다.
|
|
.dll 파일을 ISAPI extension으로 처리하려면 httpd.conf 파일에
|
|
다음과 같이 추가한다.</p>
|
|
<example>
|
|
AddHandler isapi-handler .dll
|
|
</example>
|
|
|
|
<p>아파치 서버는 요청한 모듈을 메모리에 계속 둘 수 없다.
|
|
그러나 httpd.conf에서 다음과 같은 설정으로 특정 모듈을 미리
|
|
읽어들일 수는 있다.</p>
|
|
<example>
|
|
ISAPICacheFile c:/WebWork/Scripts/ISAPI/mytest.dll
|
|
</example>
|
|
|
|
<p>ISAPI extension을 미리 읽어들이던지 미리 읽어들이지 않던지
|
|
관계없이 ISAPI extension은 CGI 스크립트와 동일한 권한과
|
|
제약을 따른다. 즉, ISAPI .dll 파일이 있는 디렉토리에 <directive
|
|
module="core">Options</directive> <code>ExecCGI</code>가
|
|
필요하다.</p>
|
|
|
|
<p><module>mod_isapi</module>의 ISAPI 지원에 대한 자세한
|
|
내용과 설명은 <a href="#notes">추가 설명</a>과 <a
|
|
href="#journal">개발자 정보</a>를 참고하라.</p>
|
|
</section>
|
|
|
|
<section id="notes"><title>추가 설명</title>
|
|
|
|
<p>아파치 ISAPI 구현은 비동기 입출력에 대한 "마이크로소프트
|
|
특유의" 확장기능을 제외한 ISAPI 2.0 규약을 모두 만족한다.
|
|
아파치의 입출력 구조로는 ISAPI가 사용할 수 있는 방식으로
|
|
비동기 입출력을 할 수 없다. ISA가 비동기 입출력과 같이 지원하지
|
|
않는 기능을 사용하려 한다면, 디버깅에 도움을 주기위해 오류
|
|
로그에 기록을 남긴다. 로그가 매우 커질 수 있기때문에
|
|
<code>ISAPILogNotSupported Off</code> 지시어를 사용하면
|
|
로그에 기록하지 않는다.</p>
|
|
|
|
<p>Microsoft IIS와 같은 서버는 ISAPI extension을 메모리로
|
|
읽어들여서 메모리 사용량이 매우 많지 않거나 특별히 설정하지
|
|
않는한 그대로 메모리에 둔다. 아파치는 현재 <directive
|
|
module="mod_isapi">ISAPICacheFile</directive> 지시어를 사용하지
|
|
않는다면 요청을 받을때마다 ISAPI extension을 메모리에 읽어들이고
|
|
버린다. 비효율적이지만, 아파치의 메모리 구조상 이것이 가장
|
|
효율적인 방법이다. 여러 ISAPI 모듈이 아파치 서버와 약간
|
|
호환이 안맞기때문에 서버의 안정성을 위해 모듈을 메모리에서
|
|
버린다.</p>
|
|
|
|
<p>또, 아파치는 ISAPI Extension을 지원하지만, <strong>ISAPI
|
|
Filter를 지원하지 않음을</strong> 기억하라. 나중에 필터를
|
|
지원할 수 있지만, 현재는 계획이 없다.</p>
|
|
</section>
|
|
|
|
<section id="journal"><title>개발자 정보</title>
|
|
|
|
<p>아파치 2.0 <module>mod_isapi</module> 모듈을 프로그래밍한다면,
|
|
<code>ServerSupportFunction</code> 호출을 다음 지시어로
|
|
제한해야 한다.</p>
|
|
|
|
<dl>
|
|
<dt><code>HSE_REQ_SEND_URL_REDIRECT_RESP</code></dt>
|
|
<dd>사용자를 다른 위치로 리다이렉션한다.<br />
|
|
완전한 URL을 사용해야 한다 (<em>예를 들어,</em>
|
|
<code>http://server/location</code>).</dd>
|
|
|
|
<dt><code>HSE_REQ_SEND_URL</code></dt>
|
|
<dd>사용자를 다른 위치로 리다이렉션한다.<br />
|
|
완전한 URL이 아니며, 프로토콜과 서버명을 넘길 수 없다
|
|
(<em>예를 들어,</em> <code>/location</code>같은 것만 가능).<br />
|
|
브라우저가 아니라 서버가 리다이렉션을 처리한다.<br />
|
|
<note type="warning"><title>경고</title>
|
|
<p>최근 문서를 보면 Microsoft가 두 <code>HSE_REQ_SEND_URL</code>
|
|
기능간의 차이를 없앤 것처럼 보인다. 아파치는 계속 이
|
|
둘의 아규먼트 조건과 행동을 다르게 처리할 것이다.</p>
|
|
</note></dd>
|
|
|
|
<dt><code>HSE_REQ_SEND_RESPONSE_HEADER</code></dt>
|
|
<dd>headers 문자열 아규먼트에 빈줄이 (줄바꿈문자가 두번
|
|
연속) 있다면 아파치는 헤더 다음 내용을 응답 내용으로 사용한다.
|
|
headers 아규먼트가 NULL로 끝나기때문에, 응답 내용에 NULL을
|
|
사용할 수 없다.</dd>
|
|
|
|
<dt><code>HSE_REQ_DONE_WITH_SESSION</code></dt>
|
|
<dd>ISAPI가 처리를 마치면 세션이 끝나기때문에 아파치는
|
|
아무 일도 하지 않는다.</dd>
|
|
|
|
<dt><code>HSE_REQ_MAP_URL_TO_PATH</code></dt>
|
|
<dd>아파치는 가상 이름을 물리적(실제) 이름으로 변환한다.</dd>
|
|
|
|
<dt><code>HSE_APPEND_LOG_PARAMETER</code></dt>
|
|
<dd>
|
|
문구를 아래 로그중 한곳에 남긴다.
|
|
|
|
<ul>
|
|
<li><directive module="mod_log_config">CustomLog</directive>
|
|
지시어의 <code>\"%{isapi-parameter}n\"</code> 항목에</li>
|
|
|
|
<li><directive module="mod_isapi">ISAPIAppendLogToQuery</directive>
|
|
<code>On</code> 지시어를 사용하여 <code>%q</code>
|
|
로그 항목에</li>
|
|
|
|
<li><directive
|
|
module="mod_isapi">ISAPIAppendLogToErrors</directive>
|
|
<code>On</code> 지시어를 사용하여 오류 로그에</li>
|
|
</ul>
|
|
|
|
<p>첫번째로 나온 <code>%{isapi-parameter}n</code> 항목은
|
|
언제나 사용할 수 있으며 권장한다.</p>
|
|
</dd>
|
|
|
|
<dt><code>HSE_REQ_IS_KEEP_CONN</code></dt>
|
|
<dd>협상된 Keep-Alive 상태를 반환한다.</dd>
|
|
|
|
<dt><code>HSE_REQ_SEND_RESPONSE_HEADER_EX</code></dt>
|
|
<dd><code>fKeepConn</code> 옵션을 무시하는 것을 제외하고는
|
|
문서에 나온데로 동작한다.</dd>
|
|
|
|
<dt><code>HSE_REQ_IS_CONNECTED</code></dt>
|
|
<dd>요청이 중간에 끊어졌다면 false를 반환한다.</dd>
|
|
</dl>
|
|
|
|
<p>지원하지 않는 <code>ServerSupportFunction</code> 호출을
|
|
하면 아파치는 <code>FALSE</code>를 반환하고
|
|
<code>GetLastError</code> 값을
|
|
<code>ERROR_INVALID_PARAMETER</code>로 설정한다.</p>
|
|
|
|
<p><code>ReadClient</code>는 (<directive
|
|
module="mod_isapi">ISAPIReadAheadBuffer</directive>로 정의한)
|
|
초기버퍼크기를 넘어선 요청 내용을 가져온다.
|
|
<directive>ISAPIReadAheadBuffer</directive> 설정 (ISAPI
|
|
핸들러를 부르기전 버퍼의 바이트수) 보다 짧은 요청은 extension을
|
|
부를때 전부 전달된다. 요청이 길면, ISAPI extension은
|
|
<code>ReadClient</code>로 나머지 요청 내용을 가져와야 한다.</p>
|
|
|
|
<p><code>WriteClient</code>를 지원하지만,
|
|
<code>HSE_IO_SYNC</code> 옵션만 사용하거나 (<code>0</code>
|
|
값) 아무 옵션도 사용하지 않아야 한다. 다른
|
|
<code>WriteClient</code> 요청은 <code>FALSE</code>를 반환하며
|
|
실패하고, <code>GetLastError</code> 값은
|
|
<code>ERROR_INVALID_PARAMETER</code>가 된다.</p>
|
|
|
|
<p><code>GetServerVariable</code>은 지원하지만, (다른 서버에서
|
|
정의하는) 확장 서버변수는 없다.
|
|
<code>GetServerVariable</code>에서 모든 일반적인 아파치
|
|
CGI 환경변수와 <code>ALL_HTTP</code>, <code>ALL_RAW</code>
|
|
값을 사용할 수 있다.</p>
|
|
|
|
<p>아파치 2.0 <module>mod_isapi</module>는 이후 ISAPI 규약에
|
|
나온 추가 기능을 지원하고, 비동기 입출력과
|
|
<code>TransmitFile</code> 기능을 조금 흉내낸다. 또, ISAPI
|
|
.dll을 미리 읽어들여서 성능을 높이는 아파치 1.3
|
|
<code>mod_isapi</code>에는 없는 기능을 지원한다.</p>
|
|
</section>
|
|
|
|
<directivesynopsis>
|
|
<name>ISAPICacheFile</name>
|
|
<description>서버가 시작할때 메모리로 읽어들일 ISAPI .dll 파일들</description>
|
|
<syntax>ISAPICacheFile <var>file-path</var> [<var>file-path</var>]
|
|
...</syntax>
|
|
<contextlist><context>server config</context><context>virtual host</context>
|
|
</contextlist>
|
|
|
|
<usage>
|
|
<p>아파치 서버가 시작할때 메모리로 읽어들여서 서버를 종료할때까지
|
|
메모리에 남아있을 파일명을 공백으로 구분하여 지정한다. 이
|
|
지시어는 ISAPI .dll 파일별로 여러번 사용할 수 있다. 파일의
|
|
전체 경로를 적는다. 절대 경로가 아니면 <directive
|
|
module="core">ServerRoot</directive>에 상대 경로로 받아들인다.</p>
|
|
</usage>
|
|
</directivesynopsis>
|
|
|
|
<directivesynopsis>
|
|
<name>ISAPIReadAheadBuffer</name>
|
|
<description>ISAPI extension의 미리읽기버퍼(read ahead buffer)
|
|
크기</description>
|
|
<syntax>ISAPIReadAheadBuffer <var>size</var></syntax>
|
|
<default>ISAPIReadAheadBuffer 49152</default>
|
|
<contextlist><context>server config</context><context>virtual host</context>
|
|
<context>directory</context><context>.htaccess</context></contextlist>
|
|
<override>FileInfo</override>
|
|
|
|
<usage>
|
|
<p>ISAPI extension을 처음 호출할때 미리읽기버퍼의 최대 크기를
|
|
지정한다. (이 크기보다 큰) 나머지 자료는 <code>ReadClient</code>
|
|
콜백을 사용하여 읽어야 한다. 어떤 ISAPI extension은
|
|
<code>ReadClient</code> 기능을 지원하지 않는다. 이 경우
|
|
ISAPI extension 제작자에게 문의하라.</p>
|
|
</usage>
|
|
</directivesynopsis>
|
|
|
|
<directivesynopsis>
|
|
<name>ISAPILogNotSupported</name>
|
|
<description>ISAPI extension이 지원하지 않는 기능을 요청하면
|
|
로그에 기록한다</description>
|
|
<syntax>ISAPILogNotSupported on|off</syntax>
|
|
<default>ISAPILogNotSupported off</default>
|
|
<contextlist><context>server config</context><context>virtual host</context>
|
|
<context>directory</context><context>.htaccess</context></contextlist>
|
|
<override>FileInfo</override>
|
|
|
|
<usage>
|
|
<p>ISAPI extension이 지원하지 않는 기능을 요청하면 서버
|
|
오류 로그에 기록한다. 나중에 관리자가 문제를 추적하는데
|
|
도움이 된다. 원하는 모든 ISAPI 모듈이 정상적으로 동작하면
|
|
다시 off로 되돌려야 한다.</p>
|
|
</usage>
|
|
</directivesynopsis>
|
|
|
|
<directivesynopsis>
|
|
<name>ISAPIAppendLogToErrors</name>
|
|
<description>ISAPI exntension의 <code>HSE_APPEND_LOG_PARAMETER</code>
|
|
요청을 오류 로그에 기록한다</description>
|
|
<syntax>ISAPIAppendLogToErrors on|off</syntax>
|
|
<default>ISAPIAppendLogToErrors off</default>
|
|
<contextlist><context>server config</context><context>virtual host</context>
|
|
<context>directory</context><context>.htaccess</context></contextlist>
|
|
<override>FileInfo</override>
|
|
|
|
<usage>
|
|
<p>ISAPI exntension의 <code>HSE_APPEND_LOG_PARAMETER</code>
|
|
요청을 오류 로그에 기록한다.</p>
|
|
</usage>
|
|
</directivesynopsis>
|
|
|
|
<directivesynopsis>
|
|
<name>ISAPIAppendLogToQuery</name>
|
|
<description>ISAPI exntension의 <code>HSE_APPEND_LOG_PARAMETER</code>
|
|
요청을 질의문자열에 기록한다</description>
|
|
<syntax>ISAPIAppendLogToQuery on|off</syntax>
|
|
<default>ISAPIAppendLogToQuery on</default>
|
|
<contextlist><context>server config</context><context>virtual host</context>
|
|
<context>directory</context><context>.htaccess</context></contextlist>
|
|
<override>FileInfo</override>
|
|
|
|
<usage>
|
|
<p>ISAPI exntension의 <code>HSE_APPEND_LOG_PARAMETER</code>
|
|
요청을 질의문자열에 기록한다 (<directive
|
|
module="mod_log_config">CustomLog</directive> <code>%q</code>
|
|
항목에 덧붙인다).</p>
|
|
</usage>
|
|
</directivesynopsis>
|
|
|
|
<directivesynopsis>
|
|
<name>ISAPIFakeAsync</name>
|
|
<description>비동기 ISAPI 콜백을 지원하는 척한다</description>
|
|
<syntax>ISAPIFakeAsync on|off</syntax>
|
|
<default>ISAPIFakeAsync off</default>
|
|
<contextlist><context>server config</context><context>virtual host</context>
|
|
<context>directory</context><context>.htaccess</context></contextlist>
|
|
<override>FileInfo</override>
|
|
|
|
<usage>
|
|
<p>on으로 설정하면 비동기 ISAPI 콜백 지원을 흉내낸다.</p>
|
|
</usage>
|
|
</directivesynopsis>
|
|
|
|
</modulesynopsis>
|
|
|