아파치에서 핸들러 사용 - Apache HTTP Server

Apache HTTP Server Version 2.2

Apache > HTTP Server > Documentation > Version 2.2

# 아파치에서 핸들러 사용

가능한 언어: en | es | fr | ja | ko | ru | tr | zh-cn

이 문서는 최신판 번역이 아닙니다. 최근에 변경된 내용은 영어 문서를 참고하세요.

이 문서는 아파치에서 핸들러를 사용하는 방법을 설명한다.

- Comments

## 핸들러가 무엇인가

관련된 모듈 | 관련된 지시어
--- | ---
`mod_actions` `mod_asis` `mod_cgi` `mod_imagemap` `mod_info` `mod_mime` `mod_negotiation` `mod_status` | `Action` `AddHandler` `RemoveHandler` `SetHandler`

파일을 요청할때 아파치가 내부적으로 수행할 작업을 "핸들러(handler)"라고 한다. 일반적으로 파일은 파일 종류에 따라 암묵적인 핸들러를 가지고 있다. 모든 파일은 보통 간단히 서버가 서비스하지만, 어떤 파일 종류는 따로 "처리된다(handled)".

Apache 1.1부터 핸들러를 명시적으로 사용할 수 있게 되었다. 파일 종류와 관계없이 핸들러를 파일의 확장자나 위치에 따라 지정할 수 있다. 이는 더 훌륭한 방법이고 파일을 종류와 핸들러 둘 모두와 연계할 수 있기때문에 좋다. (여러 확장자를 가진 파일도 참고)

핸들러는 서버나 모듈로 구현하여, `Action` 지시어로 추가할 수 있다. 표준 배포본에 있는 기본 핸들러는 다음과 같다:

- default-handler: 정적인 내용을 처리하기위해 기본적으로 사용하는 핸들러 `default_handler()`를 사용하여 파일을 보낸다. (core)
- send-as-is: HTTP 헤더가 있는 파일을 그대로 보낸다. (`mod_asis`)
- cgi-script: 파일을 CGI로 처리한다. (`mod_cgi`)
- imap-file: imagemap 규칙 파일로 처리한다. (`mod_imagemap`)
- server-info: 서버의 설정 정보를 알려준다. (`mod_info`)
- server-status: 서버의 상태를 보고한다. (`mod_status`)
- type-map: 내용협상에 사용할 type map으로 처리한다. (`mod_negotiation`)

## 예제

### CGI 스크립트를 사용하여 정적인 내용 수정하기

다음 지시어는 확장자가 `html`인 파일을 요청할 경우 `footer.pl` CGI 스크립트를 띄운다.

`Action add-footer /cgi-bin/footer.pl
AddHandler add-footer .html`

CGI 스크립트는 (`PATH_TRANSLATED` 환경변수가 지칭하는) 원래 요청한 문서를 적절히 수정한 후 보낸다.

### HTTP 헤더를 포함하는 파일

다음 지시어는 HTTP 헤더를 포함하는 파일에 `send-as-is` 핸들러를 지시한다. `/web/htdocs/asis/` 디렉토리 안에 있는 모든 파일은 확장자와 관계없이 `send-as-is` 핸들러가 처리한다.

`<Directory /web/htdocs/asis>
SetHandler send-as-is
</Directory>`

## 프로그래머를 위한 정보

핸들러 기능을 구현하기위해 사용함직한 Apache API가 추가되었다. 특히 `request_rec` 구조체에 새로운 필드가 추가되었다:

`char *handler`

모듈이 핸들러를 사용하려면, 요청의 `invoke_handler` 단계 이전에 `r->handler`에 핸들러 이름을 지정해주기만 하면 된다. 핸들러는 content type 대신 핸들러 이름을 사용한 것을 제외하고는 전과 같이 구현되었다. 꼭 지킬 필요는 없지만 핸들러 이름에 슬래쉬를 사용하지 않고, 단어들 사이에 빼기 기호를 사용하는 것이 일반적이다. 그래서 핸들러 이름이 media type과 겹치지 않는다.

가능한 언어: en | es | fr | ja | ko | ru | tr | zh-cn

## Comments

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.