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

Apache Server 2.2

Apache HTTP Server Version 2.2

<-

아파치에서 핸들러 사용

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

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

top

핸들러가 무엇인가

파일을 요청할때 아파치가 내부적으로 수행할 작업을 "핸들러(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)
top

예제

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>

top

프로그래머를 위한 정보

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

char *handler

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