[Linux] Nginx FastCGI 에 대한 설명
Nginx FastCGI
FastCGI모듈은 엔진엑스 기본 빌드에 포함되므로 컴파일때 수작업으로 설정할 필요는 없다. 다음 지시어들은 엔진엑스가 FastCGI어플리케이션에 요청을 넘겨주는 방법에 관한 환경을 설정한다. 엔진엑스 환경설정 폴더에 있는 fastcgi_params파일에는 대부분의 상황에서 유효한 지시어 값들이 정의돼 있음에 유의한다.
주요지시어
지시어 | 설명 | 문맥 | 구문 | 기본값 | 사용예 |
---|---|---|---|---|---|
fastcgi_pass | 위치를 명시해 요청이 FastCGI서버에 전달되게 지정한다. | location, if | TCP 소켓일 때의 구문: fastcgi_pass hostname:port; 유닉스도메인소켓일떄의 구문: fastcgi_pass unix:/path/to/fastcgi.socket; 업스트림블록을 지정할수 있다: fastcgi_pass myblock; |
|
|
fastcgi_param | 요청이 FastCGI에 전달되게 환경을 설정한다. 모든 FastCGI에 대해 두개의 매개변수 SCRIPT_FILENAME과 QUERY_STRING이 반드시 필요하다. | http, server, location | fastcgi_param PARAM value; | fastcgi_param SCRIPT_FILENAME /home/website.com/www$fastcgi_script_name;
fastcgi_param QUERY_STRING $qeury_string; POST요청은 REQUEST_METHOD, CONTENT_TYPE, CONTENT_LENGTH매개변수를 추가로 요구한다. fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; 엔진엑스 환경설정 폴더에 있는 fastcgi_params파일은 필요한 모든 매개변수 정의를 이미 포함하고 있다. 단, 각 FastCGI환경설저에 대해 따로 지정해야 하는 SCRIPT_FILENAME매개변수만 제외돼 있다. |
|
fastcgi_pass_header | FastCGI 서버로 넘겨주는 추가적인 헤더를 지정한다. | http, server, location | fastcgi_pass_header headername; | fastcgi_pass_header Authorization; | |
fastcgi_hide_header | FastCGI에게 숨겨야 하는 헤더를 지정한다.(Nginx가 전달하지 않는 헤더) | http, server, location | fastcgi_hide_header headername; | fastcgi_hide_header X-Forwarded-For; | |
fastcgi_ignore_client_abort | 이 지시어는 클라이언트가 웹 서버로 보낸 요청을 중단시킬 때의 처리방법을 정의한다. 지시어가 on으로 설정되어 있으면 엔진엑스는 중단 요청을 무시하고 요청을 계속 처리해 마친다. off로 설정돼있으면 엔진엑스는 중단 요청을 무시하지 않는다. 요청처리를 즉각 중단하고 FastCGI서버와의 통신을 끝낸다. | http, server, location | on | off | off | |
fastcgi_intercept_errors | Nginx가 Gateway로부터 회신된 에러를 처리할것인지, 아니면 에러페이지를 직접 클라이언트에게 보낼것인지를 정의한다.
(유의사항: 에러처리는 엔진엑스의 error_page지시어를 통해 수행된다.) |
http, server, location | on | off | off | |
fastcgi_read_timeout | FastCGI로부터의 응답제한시간을 정의한다. 이 시간이 초과되도 Nginx가 응답을 받지 못하면 504 Gateway Timeout HTTP에러를 리턴한다. | http, server, location | 숫자 값(초) | 60초 | |
fastcgi_connect_timeout | 백엔드 서버 접속 제한시간을 정의한다. 이 값은 읽기/보내기 제한 시간과는 다르다. Nginx가 이미 백엔드 서버에 접속된 상태면 fastcgi_connect_timeout은 적용할수 없다. | http, server, location | 숫자 값(초) | 60초 | |
fastcgi_send_timeout | 백엔드서버에 데이터를 보낼때의 제한시간이다. 이 제한시간은 전체 응답지연에 적용되는게 아니라 두개의 쓰기 작업사이에 적용된다. | http, server, localtion | 숫자 값(초) | 60초 | |
fastcgi_split_path_info | http://website.com/page.php/param1/param2와 같은 형태의 URL일 때 특히 유용한 지시어다. 이 지시어는 지정한 정규표현식에 따라 경로 정보를 분할한다. |
location | 정규표현식 | fastcgi_split_path_info ^(.+\.php)(.*) $;
이것은 두개의 변수에 영향을 준다.
이 두변수는 이후의 매개변수 정의에서 사용될수 있다. fastcgi_param SCRIPT_FILENAME /home/website.com/www$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; |
|
fastcgi_store | FastCGI어플리케이션으로부터의 응답을 저장 장치의 파일에 저장하는 간단한 캐시 저장소를 사용한다. 동일한 URI가 다시 요청될경우 요청을 FastCGI어플리케이션에 전달하는 대신 캐시저장소로부터 직접 읽어 문서를 서비스한다.
이 지시어는 캐시 저장소를 사용하거나 해제한다. |
http, server, location | on | off | ||
fastcgi_store_access | 이 지시어는 캐시저장소의 사용으로 생성되는 파일에 적용할 접근권한을 정의한다. | http, server, location | fastcgi_store_access [user:r|w|rw] [group:r|w|rw] [all:r|w|rw] | fastcgi_store_access user:rw; | |
fastcgi_temp_path | 임시 파일이나 캐시저장파일의 경로를 설정한다. | http, server, location | 파일경로 | fastcgi_temp_path /tmp/nginx_fastcgi; | |
fastcgi_max_temp_file_size | 이 지시어값을 0으로 설정하면 FastCGI요청용 임시파일을 사용하지 않는다 그렇지 않으면 최대 임시파일크기를 의미한다. | http, server, location | 크기 값 | 1GB | fastcgi_max_temp_file_size 5m; |
fastcgi_temp_file_write_size | 임시 파일을 저장장치에 저장할때 쓰기버퍼크기를 설정한다. | http, server, location | 크기 값 | 2*proxy_buffer_size | |
fastcgi_buffers | FastCGI어플리케이션으로부터 응답데이터를 읽을때 사용할 버퍼의 수와 크기를 설정한다. | http, server, location | fastcgi_buffers amount size; | 8버퍼, 각기 4K이거나 8K(플래폼에 따라 다름) | fastcgi_buffers 8 4k; |
fastcgi_buffer_size | FastCGI어플리케이션의 응답의 시작부분(보통은 간단한 헤더데이터를 포함)을 읽기 위한 버퍼크기를 설정한다. | http, server, location | 크기 값 | fastcgi_buffers지시어에 의해 정의된 버퍼한개의 크기 | fastcgi_buffer_size 4k; |
fastcgi_send_lowat | FreeBSD전용의 TCP소켓용 SO_SNDLOWAT플래그를 사용할수 있게 하는 옵션이다. 이 값은 출력작업용 버퍼에서의 최소 바이트수를 정의한다. | http, server, location | 숫자 값(크기) | 0 | |
fastcgi_pass_request_body | 각각 요청 바디와 추가적인 요청 헤더를 백엔드서버에 전달해야하는지 여부를 정의한다. | http, server, location | n | off | on | |
fastcgi_pass_request_headers | |||||
fastcgi_ignore_headers | 백엔드 서버 응답에서 X-Accel_Redirect, X-Accel-Expires, Expires, Cache-Control의 네 가지 헤더를 엔진엑스가 처리하지 않게 한다. | http, server, location | fastcgi_ingore_headers header1 [header2...]; | ||
fastcgi_next_upstream | fastcgi_pass가 업스트림 블록에 접속될때 이 지시어는 요청을 포기하고 다음 업스트림서버로 보내야하는 경우를 정의한다. 이 지시어의 값은 다음을 조합해 사용한다.
|
http, server, location |
|
||
fastcgi_catch_stderr | stderr(표준 에러 스트림)로 출력되는 에러메시지의 일부를 중간에 가로채 Nginx에러로그에 저장한다. | http, server, location | fastcgi_catch_stderr filter; | fastcgi_catch_stderr "PHP Fatal error:"; |
FastCGI캐싱
일단 Nginx가 FastCGI어플리케이션과 잘 연동되게 정확한 환경설정을 했다면 다음 지시어들을 선택적으로 사용해 캐시시스템을 구성함으로서 서버의 전체적인 성능을 개선할수 있다.
지시어 | 설명 | 문맥 | 구문 | 사용예 |
---|---|---|---|---|
fastcgi_cache | http, server, location | 캐시 존(zone)을 정의한다. 준에 부여한 실벽자는 이후의 지시어에서 재사용된다. | fastcgi_cache zonename; | fastcgi_cache cache1; |
fastcgi_cache_key | 이 지시어는 캐시 항목들을 서로 구분하는 캐시 키(key)를 정의한다. 캐시 키가 $uri로 설정돼 있으면 $uri가 같은 모든 요청은 같은 캐시 항목에 대응된다. 대부분 동적웹사이트에서는 그정도로는 충분하지 않으므로 /index.php와 /index.php?page=contact가 같은 캐시 항목을 가리키지 않게 캐시 키에 질의문자열 인자를 포함할 필요가 있다. |
http, server, location | fastcgi_cache_key key; | fastcgi_cache_key "$scheme$host$request_uri$cookie_user"; |
fastcgi_cache_methods | 캐싱을 적용할 HTTP메소드를 정의한다. GET과 HEAD는 기본으로 포함되며 캐싱을 해제할수 없다. 예를 들면 POST같은 요청을 캐싱하게 설정할수 있다. |
http, server, location | fastcgi_cache_methods METHOD; | fastcgi_cache_methods POST; |
fastcgi_cache_min_uses | 요청을 캐싱하는데 필요한 최소 히트수를 정의한다. 기본으로 요청 응답은 한번의 히트후에 캐시된다.(같은 캐시 키를 갖는 이후의 요청은 캐시된 응답으로 수신된다.) |
http, server, location | 숫자 값 | fastcgi_cache_min_uses 1; |
fastcgi_cache_path | 캐시된 파일과 매개변수를 저장하기 위한 디렉토리를 지정한다. | http, server, location |
fastcgi_cache_path path [levels=numbers keys_zone=name:size inactive=time max_size=size]; 다음과 같은 매개변수를 추가할수 있다.
|
fastcgi_cache_path /tmp/nginx_cahce levels=1:2 zone=zone1:10m inactive=10m max_size=200M; |
fastcgi_cache_use_stale | Nginx가 Gateway와 관련한 특정 상황에서 오래된 캐시데이터를 사용할지 여부를 정의한다. fastcgi_cache_use_stale timeout을 사용하고 Gateway가 제한시간을 초과하면 Nginx는 캐시된 데이터로 서비스한다. |
http, server, location | fastcgi_cache_use_stale [updating] [errors] [timeout] [invalid_header] [http_500]; | fastcgi_cache_use_stale error timeout; |
fastcgi_cache_valid | 이 지시어는 여러 종류의 응답코드에 대해 각 캐시시간을 정한다 404에러코드와 연관된 응답은 1분동안 캐시하고 반대로 200 OK 응답은 10분 이상 캐시하게 할수 있다. 이 지시어는 한번 이상 사용할수도 있다. |
http, server, location | fastcgi_cache_valid code1 [code2...] time; |
fastcgi_cache_valid 404 1m; fastcgi_cache_valid 500 502 504 5m; fastcgi_cache_valid 200 10; |