Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
<?xml version="1.0" encoding="EUC-KR"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head>
<meta content="text/html; charset=EUC-KR" http-equiv="Content-Type" />
<!--
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
This file is generated from xml source: DO NOT EDIT
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-->
<title>mod_ext_filter - Apache HTTP Server Version 2.4</title>
<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
<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" />
<script src="../style/scripts/prettify.min.js" type="text/javascript">
</script>
<link href="../images/favicon.ico" rel="shortcut icon" /></head>
<body>
<div id="page-header">
<p class="menu"><a href="../mod/">모듈</a> | <a href="../mod/directives.html">지시어들</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">용어</a> | <a href="../sitemap.html">사이트맵</a></p>
<p class="apache">Apache HTTP Server Version 2.4</p>
<img alt="" src="../images/feather.png" /></div>
<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div>
<div id="path">
<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">HTTP Server</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.4</a> > <a href="./">모듈</a></div>
<div id="page-content">
<div id="preamble"><h1>아파치 모듈 mod_ext_filter</h1>
<div class="toplang">
<p><span>가능한 언어: </span><a href="../en/mod/mod_ext_filter.html" hreflang="en" rel="alternate" title="English"> en </a> |
<a href="../fr/mod/mod_ext_filter.html" hreflang="fr" rel="alternate" title="Français"> fr </a> |
<a href="../ja/mod/mod_ext_filter.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> |
<a href="../ko/mod/mod_ext_filter.html" title="Korean"> ko </a></p>
</div>
<div class="outofdate">이 문서는 최신판 번역이 아닙니다.
최근에 변경된 내용은 영어 문서를 참고하세요.</div>
<table class="module"><tr><th><a href="module-dict.html#Description">설명:</a></th><td>응답 내용을 외부 프로그램으로 처리한 후 클라이언트로
보낸다</td></tr>
<tr><th><a href="module-dict.html#Status">상태:</a></th><td>Extension</td></tr>
<tr><th><a href="module-dict.html#ModuleIdentifier">모듈명:</a></th><td>ext_filter_module</td></tr>
<tr><th><a href="module-dict.html#SourceFile">소스파일:</a></th><td>mod_ext_filter.c</td></tr></table>
<h3>요약</h3>
<p><code class="module"><a href="../mod/mod_ext_filter.html">mod_ext_filter</a></code>를 사용하면 간단하고 익숙한
방법으로 <a href="../filter.html">필터</a>를 만들 수 있다.
표준입력에서 읽고 표준출력에 쓰는 프로그램(즉, 유닉스식
필터 명령어)을 아파치 필터로 사용할 수 있다. 이런 필터는
아파치 API로 쓰여지고 아파치 서버 프로세스 안에서 실행되는
필터에 비해 매우 느리지만, 다음과 같은 장점이 있다:</p>
<ul>
<li>프로그래밍 모델이 매우 간단하다</li>
<li>프로그램이 표준입력에서 읽고 표준출력에 쓸 수만 있다면
어떤 프로그래밍/스크립트 언어라도 사용할 수 있다</li>
<li>이미 있는 프로그램을 수정없이 아파치 필터로 사용할
수 있다</li>
</ul>
<p>실제 사용하기에는 성능이 떨어지지만,
<code class="module"><a href="../mod/mod_ext_filter.html">mod_ext_filter</a></code>를 사용하여 필터를 빨리 만들어볼
수 있다.</p>
</div>
<div id="quickview"><a href="https://www.apache.org/foundation/contributing.html" class="badge"><img src="https://www.apache.org/images/SupportApache-small.png" alt="Support Apache!" /></a><h3>주제</h3>
<ul id="topics">
<li><img alt="" src="../images/down.gif" /> <a href="#examples">예제</a></li>
</ul><h3 class="directives">지시어들</h3>
<ul id="toc">
<li><img alt="" src="../images/down.gif" /> <a href="#extfilterdefine">ExtFilterDefine</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#extfilteroptions">ExtFilterOptions</a></li>
</ul>
<h3>Bugfix checklist</h3><ul class="seealso"><li><a href="https://www.apache.org/dist/httpd/CHANGES_2.4">httpd changelog</a></li><li><a href="https://bz.apache.org/bugzilla/buglist.cgi?bug_status=__open__&list_id=144532&product=Apache%20httpd-2&query_format=specific&order=changeddate%20DESC%2Cpriority%2Cbug_severity&component=mod_ext_filter">Known issues</a></li><li><a href="https://bz.apache.org/bugzilla/enter_bug.cgi?product=Apache%20httpd-2&component=mod_ext_filter">Report a bug</a></li></ul><h3>참고</h3>
<ul class="seealso">
<li><a href="../filter.html">필터</a></li>
<li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="examples" id="examples">예제</a></h2>
<h3>다른 type의 응답을 HTML로 만든다</h3>
<div class="example"><p><code>
# mod_ext_filter 지시어를 가지고<br />
# 외부 프로그램 /usr/bin/enscript를 사용하여<br />
# 문서파일과 text/c 파일을 HTML로 만들고 결과의<br />
# type을 text/html로 변경하는 필터를 정의한다<br />
ExtFilterDefine c-to-html mode=output \<br />
<span class="indent">
intype=text/c outtype=text/html \<br />
cmd="/usr/bin/enscript --color -W html -Ec -o - -"<br />
</span>
<br />
<Directory "/export/home/trawick/apacheinst/htdocs/c"><br />
<span class="indent">
# 출력에 새로운 필터를 실행하는 core 지시어<br />
SetOutputFilter c-to-html<br />
<br />
# .c 파일의 type을 text/c로 만드는 mod_mime<br />
# 지시어<br />
AddType text/c .c<br />
<br />
# 디버그 수준을 높여서 요청마다 현재 설정을<br />
# 알려주는 로그문을 기록하는 mod_ext_filter<br />
# 지시어<br />
ExtFilterOptions DebugLevel=1<br />
</span>
</Directory>
</code></p></div>
<h3>content 인코딩 필터 구현하기</h3>
<p>Note: 아래 gzip 예제는 단지 설명을 예로 든 것이다.
실제 서비스에 사용하려면 <code class="module"><a href="../mod/mod_deflate.html">mod_deflate</a></code>를
참고하길 바란다.</p>
<div class="example"><p><code>
# 외부 필터를 정의하는 mod_ext_filter 지시어<br />
ExtFilterDefine gzip mode=output cmd=/bin/gzip<br />
<br />
<Location /gzipped><br />
<span class="indent">
# 출력할때 gzip 필터를 실행하는 core 지시어<br />
SetOutputFilter gzip<br />
<br />
# "Content-Encoding: gzip" 헤더를 추가하는<br />
# mod_header 지시어<br />
Header set Content-Encoding gzip<br />
</span>
</Location>
</code></p></div>
<h3>서버를 느리게 하기</h3>
<div class="example"><p><code>
# cat으로 모든 내용을 통과하는 필터를 정의하는<br />
# mod_ext_filter 지시어; cat은 아무것도 수정하지<br />
# 않는다; 단지 처리경로를 길게 하여 자원을 더 소모한다<br />
ExtFilterDefine slowdown mode=output cmd=/bin/cat \<br />
<span class="indent">
preservescontentlength<br />
</span>
<br />
<Location /><br />
<span class="indent">
# 출력할때 slowdown 필터를 여러번 실행하는 core 지시어<br />
#<br />
SetOutputFilter slowdown;slowdown;slowdown<br />
</span>
</Location>
</code></p></div>
<h3>sed를 사용하여 응답에서 글을 대체하기</h3>
<div class="example"><p><code>
# 응답에서 글을 대체하는 필터를 정의하는<br />
# mod_ext_filter 지시어<br />
#<br />
ExtFilterDefine fixtext mode=output intype=text/html \<br />
<span class="indent">
cmd="/bin/sed s/verdana/arial/g"<br />
</span>
<br />
<Location /><br />
<span class="indent">
# 출력할때 fixtext 필터를 실행하는 core 지시어<br />
SetOutputFilter fixtext<br />
</span>
</Location>
</code></p></div>
<h3>다른 필터를 추적하기</h3>
<div class="example"><p><code>
# 압축 문제가 있는 특정 클라이언트(IP 192.168.1.31)에<br />
# 대해 mod_deflate가 읽고 쓰는 자료를 추적한다.<br />
# 이 필터는 mod_deflate로 보내기 전 자료를 추적한다.<br />
ExtFilterDefine tracebefore \<br />
<span class="indent">
cmd="/bin/tracefilter.pl /tmp/tracebefore" \<br />
EnableEnv=trace_this_client<br />
</span>
<br />
# 이 필터는 mod_deflate에서 나오는 자료를 추적한다.<br />
# ftype 파라미터를 사용하지않는 경우, 기본 필터형<br />
# AP_FTYPE_RESOURCE는 필터 순서를 mod_deflate *이전에*<br />
# 둔다. AP_FTYPE_CONTENT_SET 보다 조금 높은 숫자값을<br />
# 지정하면 mod_deflate 이후에 실행한다.<br />
ExtFilterDefine traceafter \<br />
<span class="indent">
cmd="/bin/tracefilter.pl /tmp/traceafter" \<br />
EnableEnv=trace_this_client ftype=21<br />
</span>
<br />
<Directory /usr/local/docs><br />
<span class="indent">
SetEnvIf Remote_Addr 192.168.1.31 trace_this_client<br />
SetOutputFilter tracebefore;deflate;traceafter<br />
</span>
</Directory>
</code></p></div>
<div class="example"><h3>다음은 자료를 추적하는 필터이다:</h3><p><code>
#!/usr/local/bin/perl -w<br />
use strict;<br />
<br />
open(SAVE, ">$ARGV[0]")<br />
<span class="indent">
or die "can't open $ARGV[0]: $?";<br />
</span>
<br />
while (<STDIN>) {<br />
<span class="indent">
print SAVE $_;<br />
print $_;<br />
</span>
}<br />
<br />
close(SAVE);
</code></p></div>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="ExtFilterDefine" id="ExtFilterDefine">ExtFilterDefine</a> <a name="extfilterdefine" id="extfilterdefine">지시어</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">설명:</a></th><td>외부 필터를 정의한다</td></tr>
<tr><th><a href="directive-dict.html#Syntax">문법:</a></th><td><code>ExtFilterDefine <var>filtername</var> <var>parameters</var></code></td></tr>
<tr><th><a href="directive-dict.html#Context">사용장소:</a></th><td>주서버설정</td></tr>
<tr><th><a href="directive-dict.html#Status">상태:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">모듈:</a></th><td>mod_ext_filter</td></tr>
</table>
<p><code class="directive">ExtFilterDefine</code> 지시어는 외부
필터의 성질과 실행할 프로그램, 아규먼트를 정의한다.</p>
<p><var>filtername</var>은 정의할 필터 이름을 지정한다.
이 이름을 SetOutputFilter 지시어에서 사용한다. 등록한 모든
필터들간에 이름이 겹치면 안된다. <em>현재 필터등록 API는
오류를 보고하지 않는다. 그래서 사용자는 이름이 겹치는 문제를
알지 못한다.</em></p>
<p>실행할 외부 명령어와 다른 성질을 정의하는 나머지 아규먼트는
어떤 순서로 나와도 가능하다. 단, <code>cmd=</code> 파라미터는
반드시 필요하다. 사용할 수 있는 파라미터는 다음과 같다:</p>
<dl>
<dt><code>cmd=<var>cmdline</var></code></dt>
<dd><code>cmd=</code> 키워드는 실행할 외부 명령어를 지정한다.
프로그램명 뒤에 아규먼트가 있다면 명령행을 쌍따옴표로
묶어야 한다 (<em>예를 들어</em>,
<code>cmd="<var>/bin/mypgm</var> <var>arg1</var>
<var>arg2</var>"</code>). 쉘을 거치지않고 직접 프로그램을
실행하기때문에 일반적인 쉘 따옴표는 필요없다. 프로그램
아규먼트들은 공백으로 구분한다. 프로그램 아규먼트에 공백이
있다면 공백 앞에 백슬래쉬로 사용해야 한다. 백슬래쉬가
아규먼트의 일부라면 백슬래쉬를 두번 사용해야 한다. 프로그램을
실행할때 표준 CGI 환경변수와 추가로 DOCUMENT_URI,
DOCUMENT_PATH_INFO, QUERY_STRING_UNESCAPED 변수를 설정한다.</dd>
<dt><code>mode=<var>mode</var></code></dt>
<dd>응답을 처리하는 필터는 (기본값인) <code>mode=output</code>을
사용한다. 요청을 처리하는 필터는 <code>mode=input</code>을
사용한다. <code>mode=input</code>은 아파치 2.1에 추가되었다.</dd>
<dt><code>intype=<var>imt</var></code></dt>
<dd>이 파라미터는 필터로 처리할 문서의 인터넷 media
type(<em>즉</em>, MIME type)을 지정한다. 기본적으로 모든
문서를 필터로 처리한다. <code>intype=</code>을 지정하면
다른 type의 문서는 필터로 처리하지 않는다.</dd>
<dt><code>outtype=<var>imt</var></code></dt>
<dd>이 파라미터는 필터로 처리한 문서의 인터넷 media
type(<em>즉</em>, MIME type)을 지정한다. 필터처리 작업중에
인터넷 media type을 변경할때 유용하다. 기본적으로, 인터넷
media type은 변하지 않는다.</dd>
<dt><code>PreservesContentLength</code></dt>
<dd><code>PreservesContentLength</code> 키워드는 필터가
content length를 유지하도록 한다. 대부분의 필터가 content
length를 변경하므로 이 키워드는 기본값이 아니다. 필터가
길이를 유지할때만 이 키워드를 사용해야 한다.</dd>
<dt><code>ftype=<var>filtertype</var></code></dt>
<dd>이 파라미터는 필터 종류에 대한 숫자값을 지정한다.
대부분의 경우 기본값인 AP_FTYPE_RESOURCE가 적당하다.
필터를 실행하는 순서가 자원필터와 달라야하는 경우 이
파라미터가 필요하다. 적당한 값을 알려면 util_filter.h에
있는 AP_FTYPE_* 정의를 참고하라.</dd>
<dt><code>disableenv=<var>env</var></code></dt>
<dd>이 파라미터로 설정한 환경변수가 정의되었다면 필터를
사용하지 않는다.</dd>
<dt><code>enableenv=<var>env</var></code></dt>
<dd>이 파라미터로 설정한 환경변수가 정의된 경우 필터를
사용한다.</dd>
</dl>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="ExtFilterOptions" id="ExtFilterOptions">ExtFilterOptions</a> <a name="extfilteroptions" id="extfilteroptions">지시어</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">설명:</a></th><td><code class="module"><a href="../mod/mod_ext_filter.html">mod_ext_filter</a></code> 옵션을 설정한다</td></tr>
<tr><th><a href="directive-dict.html#Syntax">문법:</a></th><td><code>ExtFilterOptions <var>option</var> [<var>option</var>] ...</code></td></tr>
<tr><th><a href="directive-dict.html#Default">기본값:</a></th><td><code>ExtFilterOptions DebugLevel=0 NoLogStderr</code></td></tr>
<tr><th><a href="directive-dict.html#Context">사용장소:</a></th><td>directory</td></tr>
<tr><th><a href="directive-dict.html#Status">상태:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">모듈:</a></th><td>mod_ext_filter</td></tr>
</table>
<p><code class="directive">ExtFilterOptions</code> 지시어는
<code class="module"><a href="../mod/mod_ext_filter.html">mod_ext_filter</a></code>의 특별한 처리옵션을 지정한다.
<var>Option</var>은 다음중 하나다.</p>
<dl>
<dt><code>DebugLevel=<var>n</var></code></dt>
<dd>
<code>DebugLevel</code> 키워드는
<code class="module"><a href="../mod/mod_ext_filter.html">mod_ext_filter</a></code>가 기록하는 디버그 문구
수준을 정한다. 기본값은 디버그문을 기록하지 않는다.
이는 <code>DebugLevel=0</code>과 같다. 높은 숫자를
사용할수록, 더 많은 디버그문이 기록되고 서버 성능이
떨어진다. 숫자값의 실제 의미는 <code>mod_ext_filter.c</code>
앞부분에 있는 DBGLVL_ 상수 정의에 설명되있다.
<p>주의: 필터 로그를 기록하려면 core 지시어 <code class="directive"><a href="../mod/core.html#loglevel">LogLevel</a></code>을 사용하여 디버그문을
아파치 오류로그에 기록해야 한다.</p>
</dd>
<dt><code>LogStderr | NoLogStderr</code></dt>
<dd><code>LogStderr</code> 키워드는 외부 필터 프로그램이
표준오류로 출력하는 문구를 아파치 오류로그에 기록한다.
<code>NoLogStderr</code>는 이 기능을 하지 않는다.</dd>
</dl>
<div class="example"><h3>예제</h3><p><code>
ExtFilterOptions LogStderr DebugLevel=0
</code></p></div>
<p>위의 설정을 사용하면 필터가 표준오류로 출력하는 문구를
아파치 오류로그에 기록하고, <code class="module"><a href="../mod/mod_ext_filter.html">mod_ext_filter</a></code>는
자체 디버그문을 기록하지 않는다. </p>
</div>
</div>
<div class="bottomlang">
<p><span>가능한 언어: </span><a href="../en/mod/mod_ext_filter.html" hreflang="en" rel="alternate" title="English"> en </a> |
<a href="../fr/mod/mod_ext_filter.html" hreflang="fr" rel="alternate" title="Français"> fr </a> |
<a href="../ja/mod/mod_ext_filter.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> |
<a href="../ko/mod/mod_ext_filter.html" title="Korean"> ko </a></p>
</div><div class="top"><a href="#page-header"><img src="../images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Comments</a></h2><div class="warning"><strong>Notice:</strong><br />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 <a href="http://httpd.apache.org/lists.html">mailing lists</a>.</div>
<script type="text/javascript"><!--//--><![CDATA[//><!--
var comments_shortname = 'httpd';
var comments_identifier = 'http://httpd.apache.org/docs/2.4/mod/mod_ext_filter.html';
(function(w, d) {
if (w.location.hostname.toLowerCase() == "httpd.apache.org") {
d.write('<div id="comments_thread"><\/div>');
var s = d.createElement('script');
s.type = 'text/javascript';
s.async = true;
s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier;
(d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s);
}
else {
d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>');
}
})(window, document);
//--><!]]></script></div><div id="footer">
<p class="apache">Copyright 2017 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
<p class="menu"><a href="../mod/">모듈</a> | <a href="../mod/directives.html">지시어들</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">용어</a> | <a href="../sitemap.html">사이트맵</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!--
if (typeof(prettyPrint) !== 'undefined') {
prettyPrint();
}
//--><!]]></script>
</body></html>