ngx_http_scgi_module

ngx_http_scgi_module 모듈을 통해 SCGI 서버에 요청을 전달할 수 있습니다.

예제 구성

location / {
    include   scgi_params;
    scgi_pass localhost:9000;
}

Directives

Syntax:  scgi_bind address [transparent] | off;
Default: —
Context: http, server, location

SCGI 서버에 대한 발신 연결이 포트 옵션이 있는 로컬 IP 주소에서 시작되도록 합니다(1.11.2). 매개변수 값은 변수를 포함할 수 있습니다(1.3.12). 특수 값 off(1.3.12)는 이전 구성 수준에서 상속된 scgi_bind 명령의 효과를 취소하고 이를 통해 시스템은 로컬 IP 주소 및 포트를 자동 할당할 수 있습니다.

transparent 매개변수(1.11.0)를 사용하여 SCGI 서버에 대한 발신 연결이 비로컬 IP 주소, 예를 들어 클라이언트의 실제 IP 주소에서 시작될 수 있습니다.

scgi_bind $remote_addr transparent;

이 매개변수가 작동하려면 일반적으로 superuser 권한이 있는 nginx 작업자 프로세스를 실행해야 합니다. Linux에서는 필수가 아닙니다(1.13.8). transparent 매개변수를 지정한 경우, 작업자 프로세스가 마스터 프로세스에서 CAP_NET_RAW 기능을 상속하기 때문입니다. 또한 SCGI 서버에서 네트워크 트래픽을 가로채도록 커널 라우팅 테이블을 구성해야 합니다.

Syntax:  scgi_buffer_size size;
Default: scgi_buffer_size 4k|8k;
Context: http, server, location

SCGI 서버에서 수신한 응답의 첫 번째 부분을 읽기 위해 사용된 버퍼의 크기를 설정합니다. 이 부분에는 일반적으로 작은 응답 헤더가 포함됩니다. 기본적으로 버퍼 크기는 하나의 메모리 페이지와 동일합니다. 이것은 플랫폼에 따라 4K 또는 8K입니다. 하지만 더 작게 만들 수 있습니다.

Syntax:  scgi_buffering on | off;
Default: scgi_buffering on;
Context: http, server, location

SCGI 서버에서 응답 버퍼링을 활성화하거나 비활성화합니다.

버퍼링이 활성화되면 nginx는 가능한 한 빨리 SCGI 서버에서 응답을 수신하여 scgi_buffer_size 및 scgi_buffers 명령으로 설정된 버퍼에 저장합니다. 전체 응답이 메모리에 맞지 않으면 일부를 디스크의 임시 파일에 저장할 수 있습니다. 임시 파일에 쓰기는 scgi_max_temp_file_size 및 scgi_temp_file_write_size 명령으로 제어됩니다.

버퍼링이 비활성화되면 응답은 수신과 동시에 즉시 클라이언트로 전달됩니다. ngnix는 SCGI 서버에서 전체 응답을 읽으려 하지 않습니다. nginx가 한 번에 서버에서 수신할 수 있는 데이터의 최대 크기는 scgi_buffer_size 명령으로 설정됩니다.

버퍼링은 “X-Accel-Buffering” 응답 헤더 필드에서 “yes” 또는 “no”를 전달하여 활성화하거나 비활성화할 수도 있습니다. 이 기능은 scgi_ignore_headers 명령을 사용하여 비활성화할 수 있습니다.

Syntax:  scgi_buffers number size;
Default: scgi_buffers 8 4k|8k;
Context: http, server, location

단일 연결의 경우 SCGI 서버에서 응답을 읽는 데 사용되는 버퍼의 크기를 설정합니다. 기본적으로 버퍼 크기는 하나의 메모리 페이지와 동일합니다. 이것은 플랫폼에 따라 4K 또는 8K입니다.

Syntax:  scgi_busy_buffers_size size;
Default: scgi_busy_buffers_size 8k|16k;
Context: http, server, location

SCGI 서버의 응답 버퍼링이 활성화되면 응답이 아직 완전히 읽히지 않는 동안 클라이언트에 응답을 전송하는 데 사용할 수 있는 버퍼의 총 크기가 제한됩니다. 그동안 나머지 버퍼는 응답을 읽는 데 사용될 수 있고 필요한 경우 응답의 버퍼링 부분이 임시 파일로 이동합니다. 기본적으로, 크기는 scgi_buffer_size 및 scgi_buffers 명령으로 설정된 2개 버퍼의 크기로 제한됩니다.

Syntax:  scgi_cache zone | off;
Default: scgi_cache off;
Context: http, server, location

캐싱에 사용된 공유 메모리 영역을 정의합니다. 동일한 영역이 여러 위치에서 사용될 수 있습니다. 매개변수 값은 변수를 포함할 수 있습니다(1.7.9). off 매개변수는 이전 구성 수준에서 상속된 캐싱을 비활성화합니다.

Syntax:  scgi_cache_background_update on | off;
Default: scgi_cache_background_update off;
Context: http, server, location
This directive appeared in version 1.11.10.

백그라운드 하위 요청을 시작하여 만료된 캐시 항목을 업데이트할 수 있고 그동안 안정적인 캐시된 응답은 클라이언트로 반환됩니다. 안정적인 캐시된 응답이 업데이트될 때 해당 응답의 사용을 허용해야 합니다.

Syntax:  scgi_cache_bypass string ...;
Default: —
Context: http, server, location

캐시에서 응답을 가져오지 않는 조건을 정의합니다. 문자열 매개변수의 하나 이상의 값이 비어 있지 않고 “0”과 같지 않으면 캐시에서 응답을 가져오지 않습니다.

scgi_cache_bypass $cookie_nocache $arg_nocache$arg_comment;
scgi_cache_bypass $http_pragma    $http_authorization;

scgi_no_cache 명령과 함께 사용할 수 있습니다.

Syntax:  scgi_cache_key string;
Default: —
Context: http, server, location

예를 들어, 캐싱의 키를 정의합니다.

scgi_cache_key localhost:9000$request_uri;
Syntax:  scgi_cache_lock on | off;
Default: scgi_cache_lock off;
Context: http, server, location
This directive appeared in version 1.1.12.

활성화되면 SCGI 서버로 요청을 전달하여 scgi_cache_key 명령에 따라 한 번에 하나의 요청만 식별된 새 캐시 요소를 채울 수 있습니다. 동일한 캐시 요소의 다른 요청은 응답이 캐시에 표시될 때까지 기다리고 또는 이 요소가 릴리스될 때까지 scgi_cache_lock_timeout 명령으로 설정된 시간까지 캐시가 잠깁니다.

Syntax:  scgi_cache_lock_age time;
Default: scgi_cache_lock_age 5s;
Context: http, server, location
This directive appeared in version 1.7.8.

새 캐시 요소를 채우기 위해 SCGI 서버로 전달된 마지막 요청이 지정된 시간 동안 완료되지 않았으면 SCGI 서버로 요청이 하나 더 전달될 수 있습니다.

Syntax:  scgi_cache_lock_timeout time;
Default: scgi_cache_lock_timeout 5s;
Context: http, server, location
This directive appeared in version 1.1.12.

scgi_cache_lock에 대한 시간 제한을 설정합니다. 시간이 만료되면 요청이 SCGI 서버로 전달되지만 응답은 캐시되지 않습니다.

1.7.8 이전에는 응답을 캐시할 수 있었습니다.

Syntax:  scgi_cache_max_range_offset number;
Default: —
Context: http, server, location
This directive appeared in version 1.11.6.

바이트 범위 요청에 대해 바이트 단위로 오프셋을 설정합니다. 범위가 오프셋을 넘어서면 범위 요청이 SCGI 서버로 전달되고 응답이 캐시되지 않습니다.

Syntax:  scgi_cache_methods GET | HEAD | POST ...;
Default: scgi_cache_methods GET HEAD;
Context: http, server, location

클라이언트 요청 방법이 이 명령에 나열되면 응답이 캐시됩니다. “GET” 및 “HEAD” 방법은 항상 목록에 추가되지만 명시적으로 지정하는 것이 좋습니다. scgi_no_cache 명령도 참조하세요.

Syntax:  scgi_cache_min_uses number;
Default: scgi_cache_min_uses 1;
Context: http, server, location

이후에 응답이 캐시되는 요청 를 설정합니다.

Syntax:  scgi_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] 
         [max_size=size] [min_free=size] [manager_files=number] [manager_sleep=time] [manager_threshold=time] 
         [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] 
         [purger_sleep=time] [purger_threshold=time];
Default: —
Context: http

캐시의 경로와 다른 매개변수를 설정합니다. 캐시 데이터는 파일에 저장됩니다. 캐시의 파일 이름은 MD5 함수를 캐시 키에 적용한 결과입니다. 수준 매개변수가 1~3의 캐시 계층 구조 수준을 정의하고 각 수준은 값 1 또는 2를 수락합니다. 예를 들어, 다음 구성에서

scgi_cache_path /data/nginx/cache levels=1:2 keys_zone=one:10m;

캐시의 파일 이름은 다음과 같습니다.

/data/nginx/cache/c/29/b7f54b2df7773722d382f4809d65029c

캐시된 응답은 먼저 임시 파일에 기록된 다음 파일 이름이 변경됩니다. 버전 0.8.9부터 임시 파일과 캐시는 다른 파일 시스템에 넣을 수 있습니다. 하지만 이 경우 비용이 적게 드는 이름 변경 작업 대신 2개의 파일 시스템 전체에서 파일이 복사됩니다. 따라서 주어진 위치에서 캐시와 임시 파일 포함 디렉터리 모두 동일한 파일 시스템에 넣는 것이 좋습니다. 임시 파일용 디렉터리는 use_temp_path 매개변수(1.7.10)를 기준으로 설정됩니다. 매개변수가 생략되거나 on으로 설정되면 주어진 위치에서 scgi_temp_path 명령로 설정된 디렉터리가 사용됩니다. 값이 off로 설정되면 임시 파일이 캐시 디렉터리에 직접 배치됩니다.

또한 모든 활성 키 및 데이터에 대한 정보는 공유 메모리 영역에 저장됩니다. 공유 메모리 영역의 이름크기는 keys_zone 매개변수로 구성됩니다. 하나의 메가바이트 영역은 약 8천 개 키를 저장할 수 있습니다.

상업적 구독의 일부로 공유 메모리 영역은 확장된 캐시 정보도 저장하므로 동일한 키 수에 대해 더 큰 영역 크기를 지정해야 합니다. 예를 들어, 하나의 메가바이트 영역은 약 4천 개 키를 저장할 수 있습니다.

비활성 매개변수로 지정된 시간 동안 캐시된 데이터는 최신인지와 관계없이 캐시에서 제거됩니다. 기본적으로, 비활성은 10분으로 설정됩니다.

특수한 “캐시 관리자” 프로세스는 max_size 매개변수로 설정된 최대 캐시 크기와 캐시가 포함된 파일 시스템의 min_free(1.19.1) 매개변수로 설정된 최소 사용 가능 공간 크기를 모니터링합니다. 크기가 초과되거나 충분한 사용 가능 공간이 없으면 가장 최근에 사용한 데이터를 제거합니다. 데이터는 manager_files, manager_threshold 및 manager_sleep 매개변수(1.11.5)로 구성된 반복에서 제거됩니다. 한 번의 반복 동안 manager_files 항목만 제거됩니다(기본적으로 100). 한 번 반복의 기간은 manager_threshold 매개변수로 제한됩니다(기본적으로 200밀리초). 반복 사이에 manager_sleep 매개변수로 구성된 일시 중지(기본적으로 50밀리초)가 실행됩니다.

시작 1분 후에 특수한 “캐시 로더” 프로세서가 작동합니다. 그러면 파일 시스템에 저장된 이전에 캐시된 데이터에 대한 정보가 캐시 영역으로 로드됩니다. 로딩도 반복적으로 수행됩니다. 한 번의 반복 동안 loader_files 항목만 제거됩니다(기본적으로 100). 또한, 한 번의 반복 기간은 loader_threshold 매개변수로 제한됩니다(기본적으로 200밀리초). 반복 사이에 loader_sleep 매개변수로 구성된 일시 중지(기본적으로 50밀리초)가 실행됩니다.

또한 다음 매개변수가 상업적 구독의 일부로 사용할 수 있습니다.

purger=on|off

wildcard key와 일치하는 캐시 항목이 캐시 퍼저(purger)(1.7.12)에 의해 디스크에서 제거됩니다. 매개변수를 on(기본값은 off)으로 설정하면 모든 캐시 항목을 통해 영구적으로 반복되고 와일드카드 키와 일치하는 항목을 삭제하는 “캐시 퍼저” 프로세스가 작동합니다.

purger_files=number

한 번의 반복 동안 스캔되는 항목 수를 설정합니다(1.7.12). 기본적으로, purger_files는 10으로 설정됩니다.

purger_threshold=number

한 번의 반복 기간이 설정됩니다(1.7.12). 기본적으로 purger_threshold는 50밀리초로 설정됩니다.

purger_sleep=number

반복 사이의 일시 중지를 설정합니다(1.7.12). 기본적으로 purger_sleep은 50밀리초로 설정됩니다.

버전 1.7.3, 1.7.7 및 1.11.10에서 캐시 헤더 형식이 변경되었습니다. 이전에 캐시된 응답은 최신 nginx 버전으로 업그레이드 후에 잘못된 것으로 간주됩니다.

Syntax:  scgi_cache_purge string ...;
Default: —
Context: http, server, location
This directive appeared in version 1.5.7.

요청이 캐시 제거 요청으로 간주되는 조건을 정의합니다. 문자열 매개변수의 하나 이상의 값이 비어 있지 않고 “0”과 같지 않으면 해당하는 캐시 키가 있는 캐시 항목이 제거됩니다. 성공적인 작업의 결과는 204 (No Content) 응답을 반환하여 표시됩니다.

제거 요청의 캐시 키가 별표(“*”)로 끝나는 경우 와일드카드 키와 일치하는 모든 캐시 항목이 캐시에서 제거됩니다. 그러나 이러한 항목은 비활성을 위해 삭제되거나 캐시 퍼저(1.7.12)에 의해 처리되거나 클라이언트가 항목에 액세스를 시도할 때까지 디스크에 남습니다.

예제 구성:

scgi_cache_path /data/nginx/cache keys_zone=cache_zone:10m;

map $request_method $purge_method {
    PURGE   1;
    default 0;
}

server {
    ...
    location / {
        scgi_pass        backend;
        scgi_cache       cache_zone;
        scgi_cache_key   $uri;
        scgi_cache_purge $purge_method;
    }
}

이 기능은 상업적 구독의 일부로 사용 가능합니다.

Syntax:  scgi_cache_revalidate on | off;
Default: scgi_cache_revalidate off;
Context: http, server, location
This directive appeared in version 1.5.7.

“If-Modified-Since” 및 “If-None-Match” 헤더 필드를 포함하는 조건부 요청을 사용하여 만료된 캐시 항목의 재검증을 활성화합니다.

Syntax:  scgi_cache_use_stale error | timeout | invalid_header | updating | http_500 | http_503 | http_403
         | http_404 | http_429 | off ...;
Default: scgi_cache_use_stale off;
Context: http, server, location

SCGI 서버와 통신하는 동안 오류가 발생할 때 오래된 캐시된 응답을 사용할 수 있는 사례를 결정합니다. 명령의 매개변수는 scgi_next_upstream명령의 매개변수와 일치합니다.

error 매개변수는 요청을 처리하는 SCGI 서버를 선택할 수 없는 경우 오래된 캐시된 응답의 사용을 허용합니다.

또한, updating 매개변수는 현재 업데이트되고 있는 경우 오래된 캐시된 응답의 사용을 허용합니다. 이에 따라 캐시된 데이터를 업데이트할 때 SCGI 서버에 대한 액세스 수가 최소화될 수 있습니다.

오래된 캐시된 응답의 사용은 응답이 오래된 후(1.11.10) 지정된 초 수 동안 응답 헤더에서 직접 활성화할 수도 있습니다. 이 방식은 명령 매개변수 사용보다 우선순위가 떨어집니다.

  • “Cache-Control” 헤더의 “stale-while-revalidate” 확장은 현재 업데이트되고 있는 경우 오래된 캐시된 응답의 사용을 허용합니다.
  • “Cache-Control” 헤더의 “stale-if-error” 확장은 오류 발생 시 오래된 캐시된 응답의 사용을 허용합니다.

새로운 캐시 요소를 채울 때 SCGI 서버에 대한 액세스 수를 최소화하려면 scgi_cache_lock 명령을 사용할 수 있습니다.

Syntax:  scgi_cache_valid [code ...] time;
Default: —
Context: http, server, location

다른 응답 코드에 대한 캐싱 시간을 설정합니다. 예를 들어, 다음 명령은

scgi_cache_valid 200 302 10m;
scgi_cache_valid 404      1m;

코드 200 및 302가 포함된 응답에 대해 10분의 캐싱을 설정하고 코드 404가 포함된 응답에 대해 1분의 캐싱을 설정합니다.

캐싱 시간만 지정된 경우

scgi_cache_valid 5m;

200, 301, 302 응답만 캐시됩니다.

또한 모든 매개변수는 모든 캐시 응답에 지정할 수 있습니다.

scgi_cache_valid 200 302 10m;
scgi_cache_valid 301      1h;
scgi_cache_valid any      1m;

캐싱의 매개변수는 응답 헤더에서 직접 설정할 수도 있습니다. 이 방식은 명령을 사용한 캐싱 시간 설정보다 우선순위가 높습니다.

  • “X-Accel-Expires” 헤더 필드는 응답의 캐싱 시간을 초 단위로 설정합니다. 0 값은 응답에 대한 캐싱을 비활성화합니다. 값이 @ 접두사로 시작하는 경우 응답이 캐시될 수 있는 Epoch 이후 절대 시간을 초 단위로 설정합니다.
  • 헤더에 “X-Accel-Expires” 필드가 포함되지 않은 경우 캐싱의 매개변수는 헤더 필드 “Expires” 또는 “Cache-Control”에서 설정할 수 있습니다.
  • 헤더에 “Set-Cookie” 필드가 포함되면 그러한 응답은 캐시되지 않습니다.
  • 헤더에 특수 값 “*”와 함께 “Vary” 필드가 포함되는 경우 그러한 응답은 캐시되지 않습니다(1.7.7). 헤더에 다른 값과 함께 “Vary” 필드가 포함된 경우 그러한 응답은 해당하는 요청 헤더 필드를 고려하여 캐시됩니다(1.7.7).

하나 이상의 이러한 응답 헤더 필드의 처리는 scgi_ignore_headers 디렉티브를 사용하여 비활성화할 수 있습니다.

Syntax:  scgi_connect_timeout time;
Default: scgi_connect_timeout 60s;
Context: http, server, location

SCGI 서버와의 연결을 설정하기 위한 시간 제한을 정의합니다. 참고로 이 제한 시간은 일반적으로 75초를 넘지 않습니다.

Syntax:  scgi_force_ranges on | off;
Default: scgi_force_ranges off;
Context: http, server, location
This directive appeared in version 1.7.7.

이러한 응답의 “Accept-Ranges” 필드와 관계없이 SCGI 서버로부터의 캐시된 응답과 캐시되지 않은 응답 모두에 대해 바이트 범위 지원을 활성화합니다.

Syntax:  scgi_hide_header field;
Default: —
Context: http, server, location

기본적으로 nginx는 클라이언트에 대한 SCGI 서버의 응답에서 헤더 필드 “Status” 및 “X-Accel-…”을 전달하지 않습니다. scgi_hide_header 명령은 전달되지 않는 추가 필드를 설정합니다. 반대로 필드 전달은 허용되어야 하고 scgi_pass_header 명령을 사용할 수 있습니다.

Syntax:  scgi_ignore_client_abort on | off;
Default: scgi_ignore_client_abort off;
Context: http, server, location

클라이언트가 응답을 기다리지 않고 연결을 닫을 때 SCGI 서버와의 연결이 닫혀야 하는지를 결정합니다.

Syntax:  scgi_ignore_headers field ...;
Default: —
Context: http, server, location

SCGI 서버의 특정한 응답 헤더 필드 처리를 비활성화합니다. 다음 필드는 무시할 수 있습니다. “X-Accel-Redirect”, “X-Accel-Expires”, “X-Accel-Limit-Rate” (1.1.6), “X-Accel-Buffering” (1.1.6), “X-Accel-Charset” (1.1.6), “Expires”, “Cache-Control”, “Set-Cookie” (0.8.44) 및 “Vary” (1.7.7).

비활성화되지 않으면 이러한 헤더 필드를 처리할 경우 다음과 같은 효과가 있습니다.

  • “X-Accel-Expires”, “Expires”, “Cache-Control”, “Set-Cookie” 및 “Vary”는 응답 캐싱의 매개변수를 설정합니다.
  • “X-Accel-Redirect”는 지정된 URI에 대한 내부 리디렉션을 허용합니다.
  • “X-Accel-Limit-Rate”는 클라이언트에 대한 응답 전송을 위해 속도 제한을 설정합니다.
  • “X-Accel-Buffering”은 응답의 버퍼링을 활성화하거나 비활성화합니다.
  • “X-Accel-Charset”은 응답의 원하는 charset를 설정합니다.
Syntax:  scgi_intercept_errors on | off;
Default: scgi_intercept_errors off;
Context: http, server, location

코드가 300보다 크거나 같은 SCGI 서버 응답이 클라이언트에 전달되어야 하는지 아니면 error_page 명령으로 처리하기 위해 가로채서 nginx로 리디렉션해야 하는지 결정합니다.

Syntax:  scgi_limit_rate rate;
Default: scgi_limit_rate 0;
Context: http, server, location
This directive appeared in version 1.7.7.

SCGI 서버에서의 응답을 읽는 속도를 제한합니다. 속도는 초당 바이트로 지정됩니다. 0 값은 속도 제한을 비활성화합니다. 제한은 요청당 설정되므로 nginx가 SCGI 서버에 대한 2개의 연결을 동시에 연 경우 전체 속도는 지정된 속도의 2배입니다. 제한은 SCGI 서버에서의 응답 버퍼링이 활성화된 경우에만 작동합니다.

Syntax:  scgi_max_temp_file_size size;
Default: scgi_max_temp_file_size 1024m;
Context: http, server, location

SCGI 서버에서의 응답 버퍼링이 활성화되고 전체 응답이 scgi_buffer_size 및 scgi_buffers 명령으로 설정된 버퍼에 맞지 않으면 응답의 일부가 임시 파일로 저장될 수 있습니다. 이 명령은 임시 파일의 최대 크기를 설정합니다. 한 번에 임시 파일에 기록되는 데이터의 크기는 scgi_temp_file_write_size 명령으로 설정됩니다.

0 값은 임시 파일에 대한 응답의 버퍼링을 비활성화합니다.

이 제한은 캐시되거나 디스크에 저장될 응답에는 적용되지 않습니다.

Syntax:  scgi_next_upstream error | timeout | invalid_header | http_500 | http_503 | http_403 | http_404 | 
         http_429 | non_idempotent | off ...;
Default: scgi_next_upstream error timeout;
Context: http, server, location

요청을 다음 서버로 전달해야 하는 경우를 지정합니다.

error

서버와의 연결을 설정하는 동안 오류가 발생하거나, 요청을 다음 서버로 전달하거나, 응답 헤더를 읽는 경우

timeout

서버와의 연결을 설정하고 요청을 서버에 전달하거나 응답 헤더를 읽는 동안 시간 제한 발생

invalid_header

서버에서 빈 응답 또는 유효하지 않은 응답을 반환한 경우

http_500

서버가 코드 500과 함께 응답을 반환함

http_503

서버가 코드 503과 함께 응답을 반환함

http_403

서버가 코드 403과 함께 응답을 반환함

http_404

서버가 코드 404와 함께 응답을 반환함

http_429

서버가 코드 429(1.11.13)와 함께 응답을 반환함

non_idempotent

일반적으로 non-idempotent 메서드(POST, LOCK, PATCH)를 포함하는 요청은 요청이 업스트림 서버(1.9.13)로 전송된 경우 다음 서버에 전달되지 않습니다. 이 옵션을 활성화하면 그러한 요청의 재시도가 명시적으로 허용됩니다.

off

다음 서버로의 요청 전달이 비활성화됩니다.

단, 아직 클라이언트에 아무것도 전송하지 않은 상태여야 요청을 다음 서버로 전달할 수 있습니다. 즉, 응답을 전송하는 동안 오류가 발생하거나 시간이 초과되면 이를 수정할 수 없습니다.

명령은 또한 서버와의 통신의 성공하지 못한 시도로 간주되는 것도 정의합니다. 오류, 시간 제한 및 invalid_header는 명령에 지정되지 않았더라도 항상 성공하지 못한 시도로 간주됩니다. http_500, http_503 및 http_429는 명령에 지정된 경우에만 성공하지 못한 시도로 간주됩니다. http_403 및 http_404는 절대 성공하지 못한 시도로 간주되지 않습니다.

다음 서버로 요청을 전달하는 것은 시도 횟수와 시간으로 제한할 수 있습니다.

Syntax:  scgi_next_upstream_timeout time;
Default: scgi_next_upstream_timeout 0;
Context: http, server, location
This directive appeared in version 1.7.5.

다음 서버로 요청을 전달할 수 있는 시간을 제한합니다 0 값은 이 제한을 비활성화합니다.

Syntax:  scgi_next_upstream_tries number;
Default: scgi_next_upstream_tries 0;
Context: http, server, location
This directive appeared in version 1.7.5.

요청을 다음 서버로 전달할 수 있는 가능한 시도 수를 제한합니다. 0 값은 이 제한을 비활성화합니다.

Syntax:  scgi_no_cache string ...;
Default: —
Context: http, server, location

응답이 캐시에 저장되지 않는 조건을 정의합니다. 문자열 매개변수의 하나 이상의 값이 비어 있지 않고 “0”과 같지 않으면 응답이 저장되지 않습니다.

scgi_no_cache $cookie_nocache $arg_nocache$arg_comment;
scgi_no_cache $http_pragma    $http_authorization;

scgi_cache_bypass 디렉티브와 함께 사용할 수 있습니다.

Syntax:  scgi_param parameter value [if_not_empty];
Default: —
Context: http, server, location

SCGI 서버로 전달해야 하는 매개변수를 설정합니다. 은 텍스트, 변수 및 그 조합을 포함할 수 있습니다. 이러한 명령은 현재 수준에서 정의된 scgi_param 명령이 없는 경우에만 이전 구성 수준에서 상속됩니다.

표준 CGI 환경 변수는 SCGI 헤더로 제공되어야 합니다. 배포판에 제공된 scgi_params 파일을 참조하세요.

location / {
    include scgi_params;
    ...
}

명령이 if_not_empty(1.1.11)로 지정된 경우 그러한 매개변수는 해당 값이 비어 있지 않은 경우에만 서버로 전달됩니다.

scgi_param HTTPS $https if_not_empty;
Syntax:  scgi_pass address;
Default: —
Context: location, if in location

SCGI 서버의 주소를 설정합니다. 이 주소는 도메인 이름이나 IP 주소와 포트로 지정할 수 있습니다.

scgi_pass localhost:9000;

또는, UNIX 도메인 소켓 경로도 가능합니다.

scgi_pass unix:/tmp/scgi.socket;

도메인 이름이 여러 주소로 나뉘는 경우, 순환 방식으로 모든 주소를 사용합니다. 주소는 서버 그룹으로도 지정할 수 있습니다.

매개변수 값은 변수를 포함할 수 있습니다. 이 경우 주소가 도메인 이름으로 지정되면 이름은 설명된 서버 그룹 중에서 검색되고 없는 경우 resolver를 사용하여 결정됩니다.

Syntax:  scgi_pass_header field;
Default: —
Context: http, server, location

SCGI 서버에서 클라이언트로 다른 방식으로 비활성화된 헤더 필드의 전달을 허용합니다.

Syntax:  scgi_pass_request_body on | off;
Default: scgi_pass_request_body on;
Context: http, server, location

원래 요청 본문이 SCGI 서버로 전달되는지를 나타냅니다. scgi_pass_request_headers 명령도 참조하세요.

Syntax:  scgi_pass_request_headers on | off;
Default: scgi_pass_request_headers on;
Context: http, server, location

원래 요청의 헤더 필드가 SCGI 서버로 전달되는지 나타냅니다. scgi_pass_request_body 명령도 참조하세요.

Syntax:  scgi_read_timeout time;
Default: scgi_read_timeout 60s;
Context: http, server, location

SCGI 서버에서 응답을 읽기 위한 시간 제한을 정의합니다. 시간 제한은 전체 응답 전송 시간이 아니라, 두 번의 연속적 읽기 작업 사이를 기준으로 설정합니다. SCGI 서버가 이 시간 내에 아무것도 전송하지 않으면 연결이 닫힙니다.

Syntax:  scgi_request_buffering on | off;
Default: scgi_request_buffering on;
Context: http, server, location
This directive appeared in version 1.7.11.

클라이언트 요청 본문의 버퍼링을 활성화하거나 비활성화합니다.

버퍼링이 활성화되면 요청을 SCGI 서버에 보내기 전에 전체 요청 본문이 클라이언트에서 읽힙니다.

버퍼링이 비활성화되면 요청 본문이 수신되자마자 SCGI 서버로 전송됩니다. 이 경우 요청은 nginx가 이미 요청 본문의 전송을 시작한 경우 다음 서버로 전달될 수 없습니다.

HTTP/1.1 청크 분할 전송 인코딩이 원래 요청 본문을 전송하는 데 사용되면 요청 본문은 명령 값과 관계없이 버퍼링됩니다.

Syntax:  scgi_send_timeout time;
Default: scgi_send_timeout 60s;
Context: http, server, location

요청을 SCGI 서버로 전송하는 데 대한 시간 제한을 설정합니다. 시간 제한은 전체 요청 전송 시간이 아니라, 두 번의 연속적 쓰기 작업 사이를 기준으로 설정합니다. SCGI 서버가 이 시간 내에 아무것도 수신하지 않으면 연결이 닫힙니다.

Syntax:  scgi_socket_keepalive on | off;
Default: scgi_socket_keepalive off;
Context: http, server, location
This directive appeared in version 1.15.6.

SCGI 서버로 나가는 연결에 대한 “TCP keepalive” 동작을 구성합니다. 기본적으로 운영체제의 설정은 소켓에 적용됩니다. 명령에서 “on” 값을 설정하면 해당 소켓에 대해 SO_KEEPALIVE 옵션이 활성화됩니다.

Syntax:  scgi_store on | off | string;
Default: scgi_store off;
Context: http, server, location

디스크에 대한 파일 저장을 활성화합니다. on 매개변수는 명령 별칭 또는 루트에 해당하는 경로로 파일을 저장합니다. off 매개변수는 파일 저장을 비활성화합니다. 또한, 파일 이름이 변수를 포함하는 문자열을 사용하여 명시적으로 설정될 수 있습니다.

scgi_store /data/www$original_uri;

파일의 수정 시간은 “Last-Modified” 응답 헤더 필드에 따라 설정됩니다. 응답은 먼저 임시 파일에 기록된 다음 파일 이름이 변경됩니다. 버전 0.8.9부터 임시 파일과 영구 저장소는 다른 파일 시스템에 넣을 수 있습니다. 하지만 이 경우 비용이 적게 드는 이름 변경 작업 대신 2개의 파일 시스템 전체에서 파일이 복사됩니다. 따라서 주어진 위치에서 scgi_temp_path 명령으로 설정되는 캐시와 임시 파일 포함 디렉터리 모두 동일한 파일 시스템에 배치하는 것이 좋습니다.

이 명령은 정적 변경 불가 파일의 로컬 복사본을 생성하는 데 사용됩니다. 예를 들어, 다음과 같습니다.

location /images/ {
    root              /data/www;
    error_page        404 = /fetch$uri;
}

location /fetch/ {
    internal;

    scgi_pass         backend:9000;
    ...

    scgi_store        on;
    scgi_store_access user:rw group:rw all:r;
    scgi_temp_path    /data/temp;

    alias             /data/www/;
}
Syntax:  scgi_store_access users:permissions ...;
Default: scgi_store_access user:rw;
Context: http, server, location

새로 생성된 파일 및 디렉터리에 대한 액세스 권한을 설정합니다. 예를 들어, 다음과 같습니다.

scgi_store_access user:rw group:rw all:r;

모든 그룹 또는 모든 액세스 권한이 지정되면 사용자 권한이 생략될 수 있습니다.

scgi_store_access group:rw all:r;
Syntax:  scgi_temp_file_write_size size;
Default: scgi_temp_file_write_size 8k|16k;
Context: http, server, location

SCGI 서버에서 임시 파일로의 응답 버퍼링이 활성화된 경우 임시 파일에 한 번에 기록되는 데이터의 크기를 제한합니다. 기본적으로 크기는 scgi_buffer_size 및 scgi_buffers 명령으로 설정되는 2개 버퍼로 제한됩니다. 임시 파일의 최대 크기는 scgi_max_temp_file_size 명령으로 설정됩니다.

Syntax:  scgi_temp_path path [level1 [level2 [level3]]];
Default: scgi_temp_path scgi_temp;
Context: http, server, location

SCGI 서버에서 수신된 데이터와 함께 임시 파일을 저장하는 디렉터리를 정의합니다. 지정된 디렉터리 아래 최대 3개 수준의 하위 디렉터리 계층 구조를 사용할 수 있습니다. 예를 들어, 다음 구성에서

scgi_temp_path /spool/nginx/scgi_temp 1 2;

임시 파일은 다음과 같을 수 있습니다.

/spool/nginx/scgi_temp/7/45/00000123457

scgi_cache_path 명령의 use_temp_path 매개변수도 참조하세요.