Apache HTTP Server Version 2.4
설명: | CGI 스크립트 실행 |
---|---|
상태: | Base |
모듈명: | cgi_module |
소스파일: | mod_cgi.c |
서버는 mime type이 application/x-httpd-cgi
이거나
(아파치 1.1 이후) 핸들러가 cgi-script
인 모든
파일을 CGI 스크립트로 인식하여, 실행하고, 그 결과를 클라이언트에게
보낸다. 파일이 AddType
지시어로 지정한 확장자를 가지거나, ScriptAlias
디렉토리 안에
있으면 CGI로 처리된다.
서버는 CGI 스크립트를 부를때 DOCUMENT_ROOT
라는
환경변수를 추가한다. 이 변수는 DocumentRoot
설정값을 가진다.
아파치에서 CGI 스크립트를 사용하는 방법에 대한 소개는 CGI로 동적 페이지 생성 투토리얼을 참고하라.
유닉스에서 다중쓰레드 MPM을 사용한다면 이 모듈대신
mod_cgid
모듈을 사용해야 한다. 사용자
입장에서 이 두 모듈은 기본적으로 동일하다.
서버는 다음과 같은 방법으로 CGI 표준이 설명하는 CGI 환경변수를 설정한다:
AcceptPathInfo
지시어를 직접 off
로
지정한 경우에만 설정한다. AcceptPathInfo
가 없는 경우 서버는 기본적으로
경로 정보가 있는 요청에 대해 404 NOT FOUND 오류를 내지만,
mod_cgi
는 경로 정보를 (URI에서 스크립트
파일명 뒤에 나오는 /more/path/info
) 받는다.
AcceptPathInfo
지시어를 생략하면
mod_cgi
요청에 대해서 AcceptPathInfo
를 On
으로
설정한 것과 같다.HostnameLookups
가 on
이고 (기본값은
off), 접속한 호스트 주소를 역DNS 검색하여 실제 호스트명을
찾은 경우에만 설정한다.IdentityCheck
가 on
이고, 접속한
호스트가 ident 프로토콜을 지원하는 경우에만 설정한다.
쉽게 이 값을 속일 수 있기때문에 이 변수의 내용을 믿으면
안되고, 클라이언트와 서버 사이에 프록시가 있다면 변수
내용이 완전히 무의미함을 주의하라.어디에서 잘못 실행되는지 스크립트의 출력을 (표준출력과 표준오류) 볼 수 없기때문에 CGI 스크립트는 전통적으로 디버깅하기 어려웠다. 아파치 1.2 이후에 추가된 지시어를 사용하면 발생한 오류를 자세히 로그에 남길 수 있다.
CGI 오류로그는 정상적으로 실행하지 못한 CGI를 기록한다. 오류가 발생한 CGI 스크립트는 로그에 여러 줄의 정보를 남긴다. 첫번째 두 줄은 항상 아래와 같은 형식이다:
%% [시간] 요청줄
%% HTTP-상태 CGI-스크립트-파일명
CGI 스크립트를 실행할 수 없는 오류인 경우 로그파일에 추가로 두 줄을 더 기록한다:
%%error
오류문
스크립트가 (보통 스크립트의 버그때문에) 잘못된 헤더 정보를 반환하는 경우, 다음 내용을 로그에 기록한다:
%request
받은 모든 HTTP 헤더
(있다면) POST나 PUT 내용
%response
CGI 스크립트 출력의 모든 헤더
%stdout
CGI 표준출력
%stderr
CGI 표준오류
(스크립트가 표준출력이나 표준오류에 아무 내용도 출력하지 않았다면 %stdout과 %stderr 부분은 생략될 수 있다).
설명: | The length of time to wait for more output from the CGI program |
---|---|
문법: | CGIScriptTimeout time[s|ms] |
기본값: | value of |
사용장소: | 주서버설정, 가상호스트, directory, .htaccess |
상태: | Base |
모듈: | mod_cgi |
지원: | Available in version 2.4.59 and later. |
The documentation for this directive has not been translated yet. Please have a look at the English version.
설명: | CGI 스크립트 오류로그파일의 위치 |
---|---|
문법: | ScriptLog file-path |
사용장소: | 주서버설정, 가상호스트 |
상태: | Base |
모듈: | mod_cgi , mod_cgid |
ScriptLog
지시어는 CGI 스크립트
오류로그파일을 지정한다. ScriptLog
를
사용하지않으면 오류로그를 만들지 않는다. 사용하면 아규먼트로
지정한 파일에 CGI 오류를 기록한다. 상대경로를 지정하면
ServerRoot
에 상대경로로
받아들인다.
ScriptLog logs/cgi_log
자식 프로세스를 실행하는 사용자, 즉 User
지시어로 지정한 사용자
권한으로 로그를 연다. 그래서 그 사용자가 스크립트 로그가
있는 디렉토리에 쓰기권한이 있던지, 직접 미리 파일을 만들어서
그 사용자에게 쓰기권한을 줘야 한다. 스크립트 로그를 주 로그
디렉토리에 둔다면 자식 프로세스를 실행하는 사용자에게 쓰기권한을
주기위해 디렉토리 권한을 변경하지 마라.
스크립트 로그는 CGI 스크립트를 작성할때 디버깅을 위한 용도이지 서버를 실행하는 동안 계속 사용하기위함이 아님을 주의하라. 속도와 효율성면에서 최적화가 안되있고, 설계한 목적이외의 방법으로 사용하면 보안상 문제가 될 수 있다.
설명: | 스크립트 로그에 기록할 PUT 혹은 POST 요청의 최대량 |
---|---|
문법: | ScriptLogBuffer bytes |
기본값: | ScriptLogBuffer 1024 |
사용장소: | 주서버설정, 가상호스트 |
상태: | Base |
모듈: | mod_cgi , mod_cgid |
큰 내용을 받아서 로그파일이 너무 빨리 커지는 현상을 막기위해 파일에 기록할 PUT 혹은 POST 내용의 크기를 제한한다. 기본적으로 1024 바이트까지 로그에 기록하지만, 이 지시어를 사용하여 수정할 수 있다.
설명: | CGI 스크립트 로그파일의 크기 제한 |
---|---|
문법: | ScriptLogLength bytes |
기본값: | ScriptLogLength 10385760 |
사용장소: | 주서버설정, 가상호스트 |
상태: | Base |
모듈: | mod_cgi , mod_cgid |
ScriptLogLength
는 CGI 스크립트
로그파일의 크기를 제한한다. CGI 오류가 발생할때마다 (모든
요청 헤더, 모든 스크립트 출력 등) 많은 정보가 로그에
기록되기때문에 파일이 매우 커질 수 있다. 파일이 무한히 커지는
문제를 막기위해 이 지시어를 사용하여 CGI 로그파일의 최대
파일크기를 설정한다. 파일의 크기가 설정한 값을 넘으면 더
이상 정보를 기록하지않는다.