ngx_http_core_module

Directives

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

이 명령을 비활성화할 경우, nginx에서 보낸 리디렉션은 상대적이 됩니다.

server_name_in_redirect 및 port_in_redirect 명령도 참조하세요.

Syntax:  aio on | off | threads[=pool];
Default: aio off;
Context: http, server, location
This directive appeared in version 0.8.11.

FreeBSD 및 Linux에서 비동기식 파일 I/O(AIO)의 사용을 활성화하거나 비활성화합니다.

location /video/ {
    aio            on;
    output_buffers 1 64k;
}

FreeBSD 4.3부터 AIO를 사용할 수 있습니다. FreeBSD 11.0 이전에 AIO는 커널로 고정 연결하거나,

options VFS_AIO

커널로 로드 가능한 모듈로 동적으로 로드할 수 있었습니다.

kldload aio

Linux에서 AIO는 커널 버전 2.6.22부터 사용할 수 있습니다. 또한, directio를 활성화해야 합니다. 그렇지 않으면 읽기가 차단됩니다.

location /video/ {
    aio            on;
    directio       512;
    output_buffers 1 128k;
}

Linux에서 directio는 512바이트 경계(XFS의 경우 4K)에서 정렬 블록을 읽는 데만 사용할 수 있습니다. 파일의 비정렬 끝단은 차단 모드에서 읽습니다. 바이트 범위 요청과 파일 처음에서 제공하지 않는 FLV 요청도 마찬가지입니다. 파일 시작과 끝에 비정렬 데이터를 읽는 것이 차단됩니다.

AIO 및 sendfile을 Linux에서 활성화하면, AIO는 directio 명령에서 지정된 크기 이상의 파일에 사용하고 그보다 파일 용량이 작거나 directio를 비활성화했을 때 sendfile을 사용합니다.

location /video/ {
    sendfile       on;
    aio            on;
    directio       8m;
}

마지막으로 작업자 프로세스를 차단하지 않고 멀티 스레드(1.7.11)를 사용하여 파일을 읽고 전송할 수 있습니다.

location /video/ {
    sendfile       on;
    aio            threads;
}

파일 읽기 및 전송 작업은 지정된 풀의 스레드로 보냅니다. 풀 이름을 생략하는 경우, 이름이 “default”인 풀을 사용합니다. 풀 이름은 변수를 포함해서 설정할 수도 있습니다.

aio threads=pool$disk;

기본적으로 멀티 스레드는 비활성화되므로 –with-threads 구성 매개변수로 활성화해야 합니다. 현재 멀티 스레드 처리는 epoll, kqueue 및 eventport 메서드와만 사용할 수 있습니다. 파일의 멀티 스레드 전송은 Linux에서만 지원됩니다.

sendfile 명령도 참조하세요.

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

aio를 활성화한 경우, 파일 작성에 사용할지 지정합니다. 현재 aio threads를 사용할 때만 사용할 수 있으며, 프록시된 서버에서 수신한 데이터로 임시 파일을 작성하는 경우로만 한정됩니다.

Syntax:  alias path;
Default: —
Context: location

지정된 위치의 대체 위치를 정의합니다. 예를 들어, 다음의 구성에서

location /i/ {
    alias /data/w3/images/;
}

“/i/top.gif” 요청을 보낼 시 /data/w3/images/top.gif 파일이 전송됩니다.

path 값에는 변수를 포함할 수 있으나, $document_root 및 $realpath_root는 예외입니다.

alias를 정규식으로 정의한 위치에서 사용할 경우, 이러한 정규식에는 캡처가 포함되고 alias는 이 캡처를 참조해야 합니다(0.7.40). 예를 들어, 다음과 같습니다.

location ~ ^/users/(.+\.(?:gif|jpe?g|png))$ {
    alias /data/w3/images/$1;
}

위치가 명령 값의 마지막 부분과 일치할 경우:

location /images/ {
    alias /data/w3/images/;
}

대신 root 명령을 사용하는 것이 좋습니다.

location /images/ {
    root /data/w3;
}
Syntax:  auth_delay time;
Default: auth_delay 0s;
Context: http, server, location
This directive appeared in version 1.17.10.

액세스를 비밀번호, 하위 요청의 결과 또는 JWT로 제한할 때 401 응답 코드로 권한이 없는 요청의 처리를 지연하여 타이밍 공격을 차단합니다.

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

HTTP/1.1에서 청크로 나뉜 전송 인코딩을 비활성화합니다. 표준에서 청크로 나뉜 인코딩을 지원하도록 요구하지만, 이를 지원하지 않는 소프트웨어를 사용할 때 유용합니다.

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

클라이언트 요청 본문을 읽는 버퍼 크기를 설정합니다. 요청 본문이 버퍼보다 클 경우, 전체 본문 또는 그 일부만 임시 파일에 작성합니다. 기본적으로 버퍼 크기는 메모리 페이지 2개와 같습니다. x86, 다른 32비트 플랫폼, x86-64에서는 8K입니다. 일반적으로 다른 64비트 플랫폼에서는 16K입니다.

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

nginx가 전체 클라이언트 요청 본문을 파일에 저장해야 하는지 결정합니다. 이 명령은 디버깅을 하거나 $request_body_file 변수 또는 ngx_http_perl_module 모듈의 $r->request_body_file 메서드 사용 시 사용할 수 있습니다.

on 값으로 설정하면 요청을 처리한 후에도 임시 파일을 제거하지 않습니다.

clean 값은 요청 처리를 제거한 후에도 임시 파일을 남겨둡니다.

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

nginx가 하나의 버퍼에 전체 클라이언트 요청 본문을 저장해야 하는지 결정합니다. 이 명령은 $request_body 변수를 사용하여 필요한 복사 작업 수를 저장할 때 사용하는 것이 좋습니다.

Syntax:  client_body_temp_path path [level1 [level2 [level3]]];
Default: client_body_temp_path client_body_temp;
Context: http, server, location

클라이언트 요청 본문이 있는 임시 파일을 저장할 디렉터리를 정의합니다. 지정된 디렉터리 아래에 최대 3개 수준의 하위 디렉터리 계층을 사용할 수 있습니다. 예를 들어, 다음 구성에서

client_body_temp_path /spool/nginx/client_temp 1 2;

임시 파일의 경로는 다음과 같습니다.

/spool/nginx/client_temp/7/45/00000123457
Syntax:  client_body_timeout time;
Default: client_body_timeout 60s;
Context: http, server, location

클라이언트 요청 본문을 읽는 시간제한을 정의합니다. 시간제한은 전체 요청 본문 전송에 대해서가 아니라 두 개의 연속적인 읽기 작업 사이의 간격에 대해서만 설정합니다. 클라이언트가 이 시간 내에 아무것도 전송하지 않으면 요청은 408(Request Time-out) 오류와 함께 종료됩니다.

Syntax:  client_header_buffer_size size;
Default: client_header_buffer_size 1k;
Context: http, server

클라이언트 요청 헤더를 읽는 버퍼 크기를 설정합니다. 대부분 요청의 경우, 1K 바이트의 버퍼로 충분합니다. 그러나 요청에 긴 쿠키가 포함되었거나 요청이 WAP 클라이언트에서 전송된 경우, 1K로 부족할 수 있습니다. 요청 행이나 요청 헤더 필드가 이 버퍼에 모두 들어가지 않을 경우, large_client_header_buffers 명령에서 구성한 더 큰 버퍼가 할당됩니다.

이 명령을 서버 수준에서 지정할 경우, 기본 서버의 값을 사용합니다. 자세한 내용은 “가상 서버 선택” 섹션을 참조하세요.

Syntax:  client_header_timeout time;
Default: client_header_timeout 60s;
Context: http, server
Syntax:  client_max_body_size size;
Default: client_max_body_size 1m;
Context: http, server, location

클라이언트 요청 본문에 허용된 최대 크기를 설정합니다. 요청의 크기가 구성된 값을 초과하는 경우, 413(Request Entity Too Large) 오류를 클라이언트에 반환합니다. 브라우저는 이 오류를 올바르게 표시할 수 없습니다. size를 0으로 설정하면 클라이언트 요청 본문 크기 검사가 비활성화됩니다.

Syntax:  connection_pool_size size;
Default: connection_pool_size 256|512;
Context: http, server

연결당 메모리 할당의 정확히 조정할 수 있습니다. 이 명령은 성능에 미치는 영향을 최소화하며, 일반적으로 사용해서는 안 됩니다. 기본적으로 이 크기는 32비트 플랫폼에서 256바이트와 같고 64비트 플랫폼에서 512바이트와 같습니다.

1.9.8버전 이전에는 모든 플랫폼에서 기본값이 256이었습니다.

Syntax:  default_type mime-type;
Default: default_type text/plain;
Context: http, server, location

응답의 기본 MIME 유형을 정의합니다. 파일 이름 확장자를 MIME 유형으로 매핑하려면 types 명령으로 설정합니다.

Syntax:  directio size | off;
Default: directio off;
Context: http, server, location
This directive appeared in version 0.7.7.

지정된 size 이상인 파일을 읽을 때 O_DIRECT 플래그(FreeBSD, Linux), F_NOCACHE 플래그(macOS) 또는 directio() 함수(Solaris)를 활성화합니다. 이 명령은 특정 요청에 대해 sendfile의 사용을 자동으로 비활성화(0.7.15)합니다. 대용량 파일을 보낼 때 유용할 수 있습니다.

directio 4m;

또는 Linux에서 aio를 사용할 때도 유용합니다.

Syntax:  directio_alignment size;
Default: directio_alignment 512;
Context: http, server, location
This directive appeared in version 0.8.11.

directio에 대한 정렬을 설정합니다. 대부분의 경우, 512바이트 정렬로 충분합니다. 그러나 Linux에서 XFS를 사용할 때는 4K로 높여야 합니다.

Syntax:  disable_symlinks off;
         disable_symlinks on | if_not_owner [from=part];
Default: disable_symlinks off;
Context: http, server, location
This directive appeared in version 1.1.15.

파일을 열 때 기호 링크를 처리하는 방법을 결정합니다.

off

경로 이름에서 기호 링크를 허용하고 검사하지 않습니다. 이는 기본 동작입니다.

on

경로 이름의 구성 요소에 기호 링크가 있을 경우, 파일 액세스가 거부됩니다.

if_not_owner

경로 이름의 구성 요소가 기호 링크이고, 링크와 링크가 가리키는 객체의 소유자가 다를 경우, 파일 액세스가 거부됩니다.

from=part

기호 링크(on 및 if_not_owner 매개변수)를 검사할 때, 일반적으로 모든 경로 이름의 구성 요소를 검사합니다. from=part 매개변수를 추가로 지정하면 경로 이름 첫 부분에서 기호 링크를 검사하지 않아도 됩니다. 이 경우, 기호 링크는 지정된 첫 부분 뒤에 오는 경로 이름 구성 요소에서부터 검사합니다. 이 값이 검사한 경로 이름의 첫 부분이 아닐 경우, 이 매개변수를 지정하지 않은 것처럼 경로 이름 전체를 검사합니다. 이 값이 전체 파일 이름과 일치할 경우, 기호 링크를 검사하지 않습니다. 이 매개변수 값에는 변수를 포함할 수 있습니다.

예:

disable_symlinks on from=$document_root;

이 명령은 openat() 및 fstatat() 인터페이스가 있는 시스템에서만 사용할 수 있습니다. 이러한 시스템에는 FreeBSD, Linux 및 Solaris의 최신 버전이 포함됩니다.

on 및 if_not_owner 매개변수는 처리 오버헤드를 추가합니다.

검색 목적만으로 디렉터리를 열 수 없는 시스템에서 이 매개변수를 사용하려면 작업자 프로세스에 검사 대상인 디렉터리 전체에 대한 읽기 권한이 있어야 합니다.

Syntax:  error_page code ... [=[response]] uri;
Default: —
Context: http, server, location, if in location

지정된 오류에 대해 표시되는 URI를 정의합니다. uri 값에는 변수를 포함할 수 있습니다.

예시:

error_page 404             /404.html;
error_page 500 502 503 504 /50x.html;

지정된 uri로 내부 리디렉션을 보내고, 클라이언트 요청 메서드를 “GET”으로 변경합니다(“GET”과 “HEAD” 외의 다른 메서드).

또한, 다음과 같이 “=response” 구문을 사용하여 다른 응답 코드로 변경할 수 있습니다.

error_page 404 =200 /empty.gif;

오류 응답을 프록시된 서버나 FastCGI/uwsgi/SCGI/gRPC 서버에서 처리하고, 서버가 다른 응답 코드(예: 200, 302, 401, 404)를 반환할 경우, 반환하는 코드로 응답할 수 있습니다.

error_page 404 = /404.php;

내부 리디렉션에서 URI와 메서드를 변경할 필요가 없을 경우, 오류 처리를 이름이 지정된 위치로 전달할 수 있습니다.

location / {
    error_page 404 = @fallback;
}

location @fallback {
    proxy_pass http://backend;
}

uri 처리에서 오류가 발생하면, 마지막으로 발생한 오류의 상태 코드가 클라이언트로 반환됩니다.

또한, 오류 처리에 URL 리디렉션을 사용할 수 있습니다.

error_page 403      http://example.com/forbidden.html;
error_page 404 =301 http://example.com/notfound.html;

이 경우에는 기본적으로 응답 코드 302를 클라이언트로 반환합니다. 리디렉션 상태 코드(301, 302, 303, 307, 308) 중 하나로만 변경할 수 있습니다.

코드 307은 버전 1.1.16 및 1.0.13까지 리디렉션으로 처리되지 않았습니다.

코드 308은 버전 1.13.0까지 리디렉션으로 처리되지 않았습니다.

이 명령은 현재 수준에서 정의된 error_page 명령이 없을 경우에만 이전 구성 수준에서 상속합니다.

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

고정 리소스에 대한 “ETag” 응답 헤더 필드의 자동 생성을 활성화하거나 비활성화합니다.

Syntax:  http { ... }
Default: —
Context: main

HTTP 서버 명령을 지정하는 구성 파일 컨텍스트를 제공합니다.

Syntax:  if_modified_since off | exact | before;
Default: if_modified_since exact;
Context: http, server, location
This directive appeared in version 0.7.24.

응답의 수정 시간을 “If-Modified-Since” 요청 헤더 필드의 시간과 비교하는 방법을 지정합니다.

off

“If-Modified-Since”요청 헤더 필드를 무시할 경우(0.7.34)

exact

정확한 일치

before

응답 수정 시간이 “If-Modified-Since” 요청 헤더 필드의 시간 이내이거나 같을 경우

Syntax:  ignore_invalid_headers on | off;
Default: ignore_invalid_headers on;
Context: http, server

이름이 잘못된 헤더 필드를 무시해야 하는지 지정합니다. 유효한 이름은 영문자, 숫자, 하이픈, 밑줄(가능할 경우)로 구성됩니다(underscores_in_headers 명령으로 제어).

이 명령을 서버 수준에서 지정할 경우, 기본 서버의 값을 사용합니다. 자세한 내용은 “가상 서버 선택” 섹션을 참조하세요.

Syntax:  internal;
Default: —
Context: location

내부 요청에만 사용할 수 있는 특정 위치를 지정합니다. 외부 요청의 경우, 클라이언트 오류 404(Not Found)를 반환합니다. 내부 요청은 다음과 같습니다.

  • error_page, index, random_index 및 try_files 명령으로 리디렉션한 요청
  • 업스트림 서버에서 “X-Accel-Redirect” 응답 헤더 필드가 리디렉션한 요청
  • ngx_http_ssi_module 모듈의 “include virtual” 명령, ngx_http_addition_module 모듈 명령, auth_request 및 mirror 명령으로 구성된 하위 요청
  • rewrite 명령이 변경한 요청

예:

error_page 404 /404.html;

location = /404.html {
    internal;
}

잘못된 구성에서 요청 처리 사이클이 발생하지 않도록 요청당 내부 리디렉션을 10회로 제한합니다. 이 한도에 도달한 경우, 오류 500(Internal Server Error)이 반환됩니다. 이 경우, “rewrite or internal redirection cycle” 메시지를 오류 로그에서 확인할 수 있습니다.

Syntax:  keepalive_disable none | browser ...;
Default: keepalive_disable msie6;
Context: http, server, location

잘못된 동작을 하는 브라우저를 사용하는 keep-alive 연결을 비활성화합니다. browser 매개변수는 해당 브라우저를 지정합니다. POST 요청을 수신하면 msie6 값이 MSIE 버전이 오래된 keep-alive 연결을 비활성화합니다. safari 값은 macOS 및 macOS와 유사한 운영 체제에서 Safari 및 Safari와 유사한 브라우저를 사용하는 keep-alive 연결을 비활성화합니다. none 값은 모든 브라우저를 사용하는 keep-alive 연결을 활성화합니다.

Syntax:  keepalive_requests number;
Default: keepalive_requests 1000;
Context: http, server, location
This directive appeared in version 0.8.0.

keep-alive 연결을 통해 서비스되는 최대 요청 개수를 설정합니다. 요청을 최대 개수까지 전송하면 연결이 종료됩니다.

각 연결에 할당된 메모리를 해제하려면 정기적으로 연결을 닫아야 합니다. 그러므로 지나치게 요청 수가 많으면 과도한 메모리를 사용할 수 있으므로, 권장하지 않습니다.

버전 1.19.10 이전에는 기본값이 100이었습니다.

Syntax:  keepalive_time time;
Default: keepalive_time 1h;
Context: http, server, location
This directive appeared in version 1.19.10.
Syntax:  keepalive_timeout timeout [header_timeout];
Default: keepalive_timeout 75s;
Context: http, server, location

첫 매개변수는 keep-alive 클라이언트 연결이 서버 측에서 열려 있는 시간제한을 설정합니다. 0 값으로 설정하면 keep-alive 클라이언트 연결을 비활성화합니다. 선택적 보조 매개변수는 “Keep-Alive: timeout=time” 응답 헤더 필드에서 값을 설정합니다. 두 개의 매개변수는 다를 수 있습니다.

“Keep-Alive: timeout=time” 헤더 필드는 Mozilla와 Konqueror에서 인정합니다. MSIE는 약 60초 내로 스스로 keep-alive 연결을 종료합니다.

Syntax:  large_client_header_buffers number size;
Default: large_client_header_buffers 4 8k;
Context: http, server

대규모 클라이언트 요청 헤더를 읽는 데 사용하는 버퍼의 최대 numbersize를 설정합니다. 요청 행은 버퍼 하나의 크기를 초과할 수 없고, 그렇지 않으면 414(Request-URI Too Large) 오류가 클라이언트로 반환됩니다. 요청 헤더 필드는 버퍼 하나의 크기를 초과할 수 없으며, 그렇지 않으면 클라이언트에 400(Bad Request) 오류가 반환됩니다. 버퍼는 필요에 따라서만 할당됩니다. 기본적으로 버퍼 크기는 8K 바이트입니다. 요청 처리가 끝나면 연결이 keep-alive 상태로 변경되고 이 버퍼는 해제됩니다.

이 명령을 서버 수준에서 지정할 경우, 기본 서버의 값을 사용합니다. 자세한 내용은 “가상 서버 선택” 섹션을 참조하세요.

Syntax:  limit_except method ... { ... }
Default: —
Context: location

위치 내에서 허용된 HTTP 메서즈를 제한합니다. method 매개변수는 다음 중 하나가 있을 수 있습니다. GET, HEAD, POST, PUT, DELETE, MKCOL, COPY, MOVE, OPTIONS, PROPFIND, PROPPATCH, LOCK, UNLOCK, PATCH. GET 메서드를 허용하면 HEAD 메서드도 허용됩니다. ngx_http_access_module, ngx_http_auth_basic_module 및 ngx_http_auth_jwt_module(1.13.10) 모듈 명령을 사용할 때만 다른 메서드에 액세스하도록 제한될 수 있습니다.

limit_except GET {
    allow 192.168.1.0/32;
    deny  all;
}
Syntax:  limit_rate rate;
Default: limit_rate 0;
Context: http, server, location, if in location

클라이언트로의 응답 전송 속도를 제한합니다. 속도는 초당 바이트로 지정됩니다. 0 값은 속도 제한을 비활성화합니다. 요청별로 제한을 설정했는데 클라이언트가 동시에 두 개의 연결을 열었을 경우, 전체 속도는 지정된 제한보다 두 배가 됩니다.

매개변수 값은 변수를 포함할 수 있습니다(1.17.0). 특정 조건에 따라 속도를 제한하는 경우에 유용할 수 있습니다.

map $slow $rate {
    1     4k;
    2     8k;
}

limit_rate $rate;

속도 제한은 $limit_rate 변수에서도 설정할 수 있지만 1.17.0버전 이후로 이 메서드는 권장하지 않습니다.

server {

    if ($slow) {
        set $limit_rate 4k;
    }

    ...
}

속도 제한은 프록시된 서버 응답의 “X-Accel-Limit-Rate” 헤더 필드에서도 설정할 수 있습니다. 이 기능은 proxy_ignore_headers, fastcgi_ignore_headers, uwsgi_ignore_headers 및 scgi_ignore_headers 명령을 사용하여 비활성화할 수 있습니다.

Syntax:  limit_rate_after size;
Default: limit_rate_after 0;
Context: http, server, location, if in location
This directive appeared in version 0.8.0.

최초 용량을 설정하고, 그 이후에 클라이언트에 대한 응답 전송 시 속도가 제한됩니다. 매개변수 값은 변수를 포함할 수 있습니다(1.17.0).

예:

location /flv/ {
    flv;
    limit_rate_after 500k;
    limit_rate       50k;
}
Syntax:  lingering_close off | on | always;
Default: lingering_close on;
Context: http, server, location
This directive appeared in versions 1.1.0 and 1.0.6.

nginx가 클라이언트 연결을 종료하는 방식을 제어합니다.

기본값 “on”으로 설정하면 nginx가 클라이언트에서 추가적인 데이터를 수신하기를 기다렸다가 처리한 다음, 완전히 연결을 종료하지만, 경험적으로 클라이언트가 추가적인 데이터를 전송할 것으로 예상할 수 있을 경우에만 해당합니다.

“always” 값으로 설정하면 nginx가 추가적 클라이언트 데이터를 무조건 기다렸다가 처리합니다.

“off” 값으로 설정하면 nginx가 추가적 데이터를 기다리지 않고 즉시 연결을 종료합니다. 이 동작은 프로토콜을 깨트리므로 일반적인 상황에서는 사용해서는 안 됩니다.

HTTP/2 연결 종료를 제어하려면 서버 수준에서 이 명령을 지정해야 합니다(1.19.1).

Syntax:  lingering_time time;
Default: lingering_time 30s;
Context: http, server, location

lingering_close가 활성화된 경우, 이 명령은 nginx가 클라이언트에서 수신되는 추가 데이터를 처리(읽기 및 무시)하는 최대 시간을 지정합니다. 그 이후에는 추가적 데이터가 있어도 연결이 종료됩니다.

Syntax:  lingering_timeout time;
Default: lingering_timeout 5s;
Context: http, server, location

lingering_close가 활성화된 경우, 이 명령은 추가적 데이터가 도착하기를 대기하는 최대 시간을 지정합니다. 이 시간 동안 데이터를 수신하지 않으면 연결이 종료됩니다. 그렇지 않을 경우 데이터를 읽고 무시하며, nginx는 다시 추가적 데이터를 기다리기 시작합니다. “대기-읽기-무시” 사이클은 lingering_time 명령에서 지정한 만큼 반복됩니다.

Syntax:  listen address[:port] [default_server] [ssl] [http2 | spdy] [proxy_protocol] [setfib=number] 
         [fastopen=number] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] 
         [ipv6only=on|off] [reuseport] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];
         listen port [default_server] [ssl] [http2 | spdy] [proxy_protocol] [setfib=number] [fastopen=number]  
         [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [ipv6only=on|off] 
         [reuseport] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];
         listen unix:path [default_server] [ssl] [http2 | spdy] [proxy_protocol] [backlog=number] [rcvbuf=size]  
         [sndbuf=size] [accept_filter=filter] [deferred] [bind] [so_keepalive=on|off|[keepidle]:[keepintvl]:
         [keepcnt]];
Default: listen *:80 | *:8000;
Context: server

IP에 대해 addressport를 설정하거나 서버가 요청을 수락할 UNIX-도메인 소켓에 대한 path를 설정합니다. addressport, 또는 addressport 하나만 지정할 수 있습니다. address는 다음과 같이 호스트 이름으로 지정할 수 있습니다.

listen 127.0.0.1:8000;
listen 127.0.0.1;
listen 8000;
listen *:8000;
listen localhost:8000;

IPv6 주소(0.7.36)는 꺾쇠 괄호에 지정됩니다.

listen [::]:8000;
listen [::1];

UNIX 도메인 소켓(0.8.21)은 “unix:” 접두사를 포함하여 지정됩니다.

listen unix:/var/run/nginx.sock;

포트 80을 사용하는 경우 address만 지정합니다.

이 명령이 없으면 nginx가 superuser 권한으로 실행될 때 *:80을 사용하고 그 이에 경우에는 *:8000을 사용합니다.

default_server 매개변수가 있으면 서버가 지정된 address:port 쌍의 기본 서버가 됩니다. default_server 매개변수가 있는 명령이 없으면 address:port 쌍이 있는 첫 서버가 이 쌍에 대한 기본 서버가 됩니다.

0.8.21버전 이전에는 이 매개변수 이름이 default만 지정되었습니다.

ssl 매개변수(0.7.14)를 사용해서 이 포트에서 수락하는 모든 연결이 SSL 모드로 작동하도록 지정할 수 있습니다. 그러면 HTTP와 HTTPS 요청을 모두 처리하는 서버에 대해 더욱 간단한 구성이 가능합니다.

http2 매개변수(1.9.5)는 포트가 HTTP/2 연결을 수락하도록 구성합니다. 일반적으로 이 구성이 작동하려면 ssl 매개변수도 지정해야 하지만 nginx는 SSL 없이 HTTP/2 연결을 수락하도록 구성할 수 있습니다.

spdy 매개변수(1.3.15-1.9.4)를 사용하면 이 포트에서 SPDY 연결을 수락하도록 허용할 수 있습니다. 일반적으로 이 구성이 작동하려면 ssl 매개변수도 지정해야 하지만 nginx는 SSL 없이 SPDY 연결을 수락하도록 구성할 수도 있습니다.

proxy_protocol 매개변수(1.5.12)를 사용하면 이 포트에서 수신하는 모든 연결이 PROXY 프로토콜을 사용하도록 지정할 수 있습니다.

PROXY 프로토콜 버전 2는 1.13.11버전 이후로 지원됩니다.

listen 명령은 소켓 관련 시스템 호출에 여러 추가 매개변수를 사용할 수 있습니다. 이 매개변수는 모든 listen 명령에서 지정할 수 있지만 특정 address:port 쌍에 대해서는 한 번만 지정할 수 있습니다.

0.8.21버전 이전에는 default 매개변수와 함께 listen 명령에서만 지정할 수 있었습니다.

setfib=number

이 매개변수(0.8.44)는 관련 라우팅 테이블을 설정하고, 리스닝 소켓에 대해서는 FIB(SO_SETFIB 옵션)를 설정합니다. 현재는 FreeBSD에서만 지원됩니다.

fastopen=number

리스닝 소켓에 대해 “TCP Fast Open“을 활성화하고(1.5.8) 3웨이 핸드셰이크를 아직 완료하지 않은 연결 대기열의 최대 길이를 제한합니다.

서버가 데이터가 포함된 동일한 SYN 패킷 수신을 2회 이상 처리할 수 있을 경우에만 이 기능을 활성화하세요.

backlog=number

listen() 호출에서 backlog 매개변수를 설정하여, 대기 중인 연결 대기열의 최대 길이를 제한합니다. 기본적으로 backlog는 FreeBSD, DragonFly BSD, macOS에서 -1로 설정되고, 다른 플랫폼에서는 511로 설정됩니다.

rcvbuf=size

리스닝 소켓에 대한 수신 버퍼 크기(SO_RCVBUF 옵션)를 설정합니다.

sndbuf=size

리스닝 소켓에 대한 전송 버퍼 크기(SO_SNDBUF 옵션)를 설정합니다.

accept_filter=filter

리스닝 소켓에 대해 수락 필터 이름(SO_ACCEPTFILTER 옵션)을 설정하여, 수신되는 연결을 필터링한 다음 accept()로 전달합니다. 이는 FreeBSD 및 NetBSD 5.0+에서만 지원합니다. 사용 가능한 값은 datareadyhttpready입니다.

deferred

Linux에서 지연된 accept()(TCP_DEFER_ACCEPT 소켓 옵션)를 사용하는 명령입니다.

bind

특정 address:port 쌍에 별도의  bind() 호출을 보내는 명령입니다. 포트가 동일하지만 주소가 다른 listen 명령이 여러 개일 경우, listen 명령 중 하나가 특정 포트(*:port)에 대한 모든 주소를 수신하고, nginx는 *:port에만  bind()되므로 유용합니다. 이 경우, getsockname() 시스템 호출을 보내서 연결을 수신한 주소를 확인해야 합니다. setfib, fastopen, backlog, rcvbuf, sndbuf, accept_filter, deferred, ipv6only, reuseport 또는 so_keepalive 매개변수를 사용할 경우, 언제나 해당 address:port 쌍에 대해 별도의 bind() 호출을 보냅니다.

ipv6only=on|off

이 매개변수(0.7.42)는 (IPV6_V6ONLY 소켓 옵션을 통해) 와일드카드 주소 [::]를 수신하는 IPv6 소켓이 IPv6와 IPv4 연결에서 IPv6 연결만 수락하는지를 결정합니다. 이 매개변수는 기본적으로 활성화됩니다. 시작 시 한 번만 설정할 수 있습니다.

1.3.4버전 이전에는 이 매개변수를 생략할 경우, 운영 체제 설정이 소켓에 적용됩니다.

reuseport

이 매개변수(1.9.1)를 사용하면 각 작업자 프로세스에 대해 (Linux 3.9+ 및 DragonFly BSD에서는 SO_REUSEPORT 소켓 옵션, FreeBSD 12+에서는 SO_REUSEPORT_LB 소켓 옵션을 사용하여) 개별 리스닝 소켓을 생성하고 커널이 작업자 프로세스 사이에 수신되는 연결을 배포하도록 합니다. 현재는 Linux 3.9+, DragonFly BSD 및 FreeBSD 12+에서만 작동합니다(1.15.1).

이 옵션을 잘못 사용하면 보안에 영향을 미칠 수 있습니다.

so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]

이 매개변수(1.1.11)는 리스닝 소켓에 “TCP keepalive” 동작을 구성합니다. 이 매개변수를 생략할 경우, 운영 체제 설정이 소켓에 적용됩니다. “on” 값으로 설정할 경우, SO_KEEPALIVE 옵션이 소켓에 활성화됩니다. “off” 값으로 설정할 경우, SO_KEEPALIVE 옵션이 소켓이 비활성화됩니다. 일부 운영 체제는 TCP_KEEPIDLE, TCP_KEEPINTVL 및 TCP_KEEPCNT 소켓 옵션을 사용하여 소켓별로 TCP keepalive 매개변수를 설정하도록 지원합니다. 이러한 시스템(현재 Linux 2.4+, NetBSD 5+ 및 FreeBSD 9.0-STABLE)의 경우, keepidle, keepintvlkeepcnt 매개변수를 사용하여 구성할 수 있습니다. 하나 또는 두 개의 매개변수를 생략할 수 있는데, 이 경우에는 해당 소켓 옵션에 대한 시스템 기본 설정이 적용됩니다. 예를 들어,

so_keepalive=30m::10

유휴 시간 초과(TCP_KEEPIDLE)를 30분으로 설정하고, 프로브 간격(TCP_KEEPINTVL)은 시스템 기본값으로 두고, 프로브 수(TCP_KEEPCNT)는 10개로 설정합니다.

listen 127.0.0.1 default_server accept_filter=dataready backlog=1024;
Syntax:	 location [ = | ~ | ~* | ^~ ] uri { ... }
         location @name { ... }
Default: —
Context: server, location

요청 URI에 따라 구성을 설정합니다.

정규화된 URI에 대해 매칭을 실행하고, “%XX” 형식으로 인코딩된 텍스트를 복호화한 후, “.” 및 “..” 상대적 경로 구성 요소에 대한 참조를 분석하고 두 개 이상의 인접한 슬래시를 하나로 압축합니다.

위치는 접두사 문자열 또는 정규식으로 정의할 수 있습니다. 정규식은 앞에 “~*” 수정자(대소문자를 구분하지 않는 매칭), 또는 “~” 수정자(대소문자를 구분하는 매칭)를 붙여서 지정합니다. 특정 요청과 일치하는 위치를 찾으려면 nginx는 먼저 접두사 문자열(접두사 위치)을 사용하여 정의된 위치를 검사해야 합니다. 그중에서도 접두사 일치가 가장 긴 위치를 선택하여 기억합니다. 정규식을 구성 파일에 표시된 순서로 검사합니다. 정규식 검사는 첫 일치에서 중단하고, 해당 구성을 사용합니다. 정규식과의 일치를 발견하지 못할 경우, 이전에 기억한 접두사 위치 구성을 사용합니다.

location 블록은 중첩할 수 있고, 일부 예외는 아래와 같습니다.

macOS, Cygwin 등의 대소문자를 구분하는 운영 체제의 경우, 접두사 문자열과의 일치는 대소문자 구분을 무시합니다(0.7.7). 그러나 비교는 1바이트 로캘로 제한됩니다.

정규식에는 나중에 다른 명령에서 사용할 캡처(0.7.40)를 포함할 수 있습니다.

접두사 일치가 가장 긴 위치에는 “^~” 수정자가 있고, 정규식을 검사하지 않습니다.

“=” 수정자를 사용하면 URI와 위치의 정확한 일치를 정의할 수 있습니다. 정확한 일치를 발견할 경우, 검색을 종료합니다. 예를 들어 “/” 요청이 수시로 발생할 경우, “location = /”을 정의하면 이러한 요청의 처리 속도가 빨라집니다. 첫 비교 후 검색이 바로 종료되기 때문입니다. 이런 위치에는 중첩된 위치를 포함할 수 없습니다.

0.7.1~0.8.41버전에서 요청이 “=” 및 “^~” 수정자 없이 요청을 일치시킬 경우에도 검색이 종료되고 정규식을 검사하지 않습니다.

그러면 예시를 통해 살펴보겠습니다.

location = / {
    [ configuration A ]
}

location / {
    [ configuration B ]
}

location /documents/ {
    [ configuration C ]
}

location ^~ /images/ {
    [ configuration D ]
}

location ~* \.(gif|jpg|jpeg)$ {
    [ configuration E ]
}

“/” 요청은 구성 A와 일치하고, “/index.html” 요청은 구성 B와 일치하며, “/documents/document.html” 요청은 구성 C와 일치합니다. “/images/1.gif” 요청은 구성 D와 일치하고, “/documents/1.jpg” 요청은 구성 E와 일치합니다.

“@” 접두사는 이름이 지정된 위치를 정의합니다. 이러한 위치는 정식 요청에는 사용하지 않지만, 대신 요청 리디렉션에는 사용합니다. 이들은 중첩할 수 없고, 중첩된 위치를 포함할 수 없습니다.

슬래시 문자로 끝나는 접두사 문자열로 위치를 정의하고 요청을 proxy_pass, fastcgi_pass, uwsgi_pass, scgi_pass, memcached_pass 또는 grpc_pass 중 하나로 처리할 경우, 특수한 처리를 실행합니다. 이 문자열과 같은 URI가 있지만 끝에 슬래시가 붙지 않은 요청에서 코드 301을 포함한 영구적 리디렉션을 슬래시를 첨부한 요청된 URI에 반환됩니다. 이 동작을 원하지 않을 경우, URI와 위치의 정확한 일치를 다음과 같이 정의할 수 있습니다.

location /user/ {
    proxy_pass http://user.example.com;
}

location = /user {
    proxy_pass http://login.example.com;
}
Syntax:  log_not_found on | off;
Default: log_not_found on;
Context: http, server, location

발견되지 않은 파일에 대한 오류를 error_log로 로깅하는 작업을 활성화하거나 비활성화합니다.

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

하위 요청을 access_log로 로깅하는 작업을 활성화하거나 비활성화합니다.

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

바이트 범위 요청에서 허용되는 최대 범위 수를 제한합니다. 제한을 초과하는 요청은 바이트 범위를 지정하지 않은 것처럼 처리합니다. 기본적으로 범위 수는 제한되지 않습니다. 0 값은 바이트 범위 지원을 완전히 비활성화합니다.

Syntax:  merge_slashes on | off;
Default: merge_slashes on;
Context: http, server

URI에서 두 개 이상의 인접한 슬래시를 하나의 슬래시로 압축하는 작업을 활성화하거나 비활성화합니다.

접두사 문자열과 정규식 위치의 위치가 올바른지 반드시 비교가 필요합니다. 그렇지 않으면 “//scripts/one.php” 요청이 일치하지 않고,

location /scripts/ {
    ...
}

고정 파일로 처리될 수 있습니다. 그러므로 “/scripts/one.php”로 변환됩니다.

URI에 base64 인코딩된 이름이 있으면 압축을 off해야 할 수도 있습니다. base64는 내부적으로 “/” 문자를 사용하기 때문입니다. 그러나 보안을 위해서는 압축을 끄지 않는 것이 좋습니다.

이 명령을 서버 수준에서 지정할 경우, 기본 서버의 값을 사용합니다. 자세한 내용은 “가상 서버 선택” 섹션을 참조하세요.

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

상태가 400 이상인 MSIE 클라이언트 응답에 대한 댓글을 추가하여 응답 용량을 512바이트로 늘리는 것을 활성화하거나 비활성화합니다.

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

MSIE 클라이언트 리디렉션 대신 새로 고침을 활성화하거나 비활성화합니다.

Syntax:  open_file_cache off;
         open_file_cache max=N [inactive=time];
Default: open_file_cache off;
Context: http, server, location

다음을 저장할 수 있는 캐시를 구성합니다.

  • 열린 파일 설명자, 크기, 수정 시간
  • 디렉터리 존재 여부에 대한 정보
  • 파일 검색 오류(“파일을 찾을 수 없음”, “읽기 권한이 없음”)

오류 캐싱은 open_file_cache_errors 명령을 사용하여 별도로 활성화해야 합니다.

이 명령은 다음과 같은 매개변수가 있습니다.

max

캐시에서 최대 요소 개수를 설정합니다. 캐시가 넘치면 가장 오래 전에 사용한(LRU) 요소를 제거합니다.

inactive

일정 시간 액세스가 없으면 캐시에서 요소를 제거하는 시간을 정의합니다. 기본값은 60초입니다.

off

캐시를 비활성화합니다.

예:

open_file_cache          max=1000 inactive=20s;
open_file_cache_valid    30s;
open_file_cache_min_uses 2;
open_file_cache_errors   on;
Syntax:  open_file_cache_errors on | off;
Default: open_file_cache_errors off;
Context: http, server, location

open_file_cache를 사용한 파일 검색 오류의 캐싱을 활성화하거나 비활성화합니다.

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

open_file_cache 명령의 inactive 매개변수에서 구성하고 파일 설명자를 캐시에서 열어두어야 하는 기간 동안 최소 파일 액세스 number를 설정합니다.

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

일정 시간이 지나 open_file_cache 요소를 인증해야 하는 시간을 설정합니다.

Syntax:  output_buffers number size;
Default: output_buffers 2 32k;
Context: http, server, location

디스크에서 응답을 읽는 데 사용하는 버퍼의 numbersize를 설정합니다.

1.9.5버전 이전에 기본값은 1 32k였습니다.

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

ngnix에서 발생한 절대 리디렉션에서 포트 지정을 활성화하거나 비활성화합니다.

리디렉션에서 기본 서버 이름의 사용은 server_name_in_redirect 명령으로 제어합니다.

Syntax:  postpone_output size;
Default: postpone_output 1460;
Context: http, server, location

가능할 경우, nginx가 전송할 최소 size(바이트)를 확보할 때까지 클라이언트 데이터 전송을 연기합니다. 0 값은 데이터 전송 연기를 비활성화합니다.

Syntax:  read_ahead size;
Default: read_ahead 0;
Context: http, server, location

파일로 작업할 때 커널에서 미리 읽을 용량을 설정합니다.

Linux에서 posix_fadvise(0, 0, 0, POSIX_FADV_SEQUENTIAL) 시스템 호출을 사용하고, size 매개변수를 무시합니다.

FreeBSD에서는 FreeBSD 9.0-CURRENT부터 지원되는 fcntl(O_READAHEAD, size) 시스템 호출을 사용합니다. FreeBSD 7은 패치가 필요합니다.

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

error_page 명령을 사용한 여러 번의 리디렉션을 활성화하거나 비활성화합니다. 이러한 리디렉션 횟수는 제한됩니다.

Syntax:  request_pool_size size;
Default: request_pool_size 4k;
Context: http, server

요청당 메모리 할당을 정확히 조정할 수 있습니다. 이 명령은 성능에 미치는 영향을 최소화하며, 일반적으로 사용해서는 안 됩니다.

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

시간 초과된 연결과 비표준 코드 444로 종료된 연결 재설정을 활성화하거나 비활성화합니다(1.15.2). 다음과 같이 재설정을 실행합니다. 소켓을 닫기 전에 시간제한 값을 0으로 한 SO_LINGER 옵션을 설정합니다. 소켓이 닫히면 TCP RST를 클라이언트로 보내고, 이 소켓이 사용하던 모든 메모리를 해제합니다. 이렇게 하면 이미 종료되고 버퍼로 채운 소켓이 FIN_WAIT1 상태에 오래 머무르지 않게 할 수 있습니다.

Syntax:  resolver address ... [valid=time] [ipv6=on|off] [status_zone=zone];
Default: —
Context: http, server, location

업스트림 서버의 이름을 주소로 확인하는 데 사용되는 이름 서버를 구성합니다. 예를 들어 다음과 같습니다.

resolver 127.0.0.1 [::1]:5353;

주소는 포트 옵션과 함께 도메인 주소 또는 IP 주소로 지정할 수 있습니다(1.3.1, 1.2.2). 포트를 지정하지 않는 경우 53 포트를 사용합니다. 네임 서버는 순환 방식으로 쿼리합니다.

1.1.7버전 이전에는 하나의 네임 서버만 구성할 수 있었습니다. IPv6 주소를 사용한 네임 서버 지정은 1.3.1 및 1.2.2버전부터 지원됩니다.

기본적으로 nginx는 확인하는 동안 IPv4 및 IPv6 주소를 모두 조회합니다. IPv6 주소 조회를 원하지 않으면 ipv6=off 매개변수를 지정할 수 있습니다.

이름을 IPv6 주소로 변경하는 기능은 1.5.8버전부터 지원됩니다.

기본적으로 nginx 캐시는 응답의 TTL 값을 사용하여 응답합니다. 선택적 valid 매개변수로도 재정의할 수 있습니다.

resolver 127.0.0.1 [::1]:5353 valid=30s;

1.1.9버전 이전에는 캐싱 시간을 조정할 수 없었고 nginx가 항상 5분 동안 응답을 캐싱했습니다.

DNS 스푸핑을 방지하려면 적절하게 보호되는 신뢰할 수 있는 로컬 네트워크에서 DNS 서버를 구성하는 것이 좋습니다.

Syntax:  resolver_timeout time;
Default: resolver_timeout 30s;
Context: http, server, location

이름 변환에 대한 시간제한을 설정합니다. 예를 들어, 다음과 같습니다.

resolver_timeout 5s;
Syntax:  root path;
Default: root html;
Context: http, server, location, if in location

요청에 대한 루트 디렉터리를 설정합니다. 예를 들어, 다음의 구성에서

location /i/ {
    root /data/w3;
}

/data/w3/i/top.gif 파일을 “/i/top.gif” 요청에 대한 응답으로 전송합니다.

path 값에는 변수를 포함할 수 있으나, $document_root 및 $realpath_root는 예외입니다.

파일 경로는 URI을 root 명령 값에 추가하는 것만으로 생성됩니다. URI를 수정해야 할 경우, alias 명령을 사용해야 합니다.

Syntax:  satisfy all | any;
Default: satisfy all;
Context: http, server, location

모든(all) 또는 1개 이상(any)의 ngx_http_access_module, ngx_http_auth_basic_module, ngx_http_auth_request_module 또는 ngx_http_auth_jwt_module 모듈에서 액세스할 수 있을 경우, 액세스를 허용합니다.

예:

location / {
    satisfy any;

    allow 192.168.1.0/32;
    deny  all;

    auth_basic           "closed site";
    auth_basic_user_file conf/htpasswd;
}
Syntax:  send_lowat size;
Default: send_lowat 0;
Context: http, server, location

명령을 0이 아닌 값으로 설정하면 nginx는 kqueue 메서드의 NOTE_LOWAT 플래그나 SO_SNDLOWAT 소켓 옵션을 사용하여 클라이언트 소켓에서 전송 작업 수를 최소화하려고 시도합니다. 두 가지 경우 모두, 지정된 size를 사용합니다.

이 명령은 Linux, Solaris 및 Windows에서 무시됩니다.

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

클라이언트로 응답을 요청을 전송하는 시간제한을 설정합니다. 시간제한은 전체 응답 전송이 아니라 두 개의 연속적인 쓰기 작업 사이에만 설정됩니다. 클라이언트가 이 시간 내에 아무것도 전송하지 않으면 연결이 종료됩니다.

Syntax:  sendfile on | off;
Default: sendfile off;
Context: http, server, location, if in location

sendfile()의 사용을 활성화하거나 비활성화합니다.

nginx 0.8.12 및 FreeBSD 5.2.1부터 aio를 사용하여 sendfile()에 대한 데이터를 미리 로드할 수 있습니다.

location /video/ {
    sendfile       on;
    tcp_nopush     on;
    aio            on;
}

이 구성에서 sendfile()는 SF_NODISKIO 플래그와 함께 호출되고, 이는 디스크 I/O에서 차단하는 대신 데이터가 메모리에 없다는 정보를 다시 보고합니다. 그러면 nginx가 1바이트를 읽어서 비동기식 데이터 로드를 시작합니다. 첫 번째 읽기에서 FreeBSD 커널이 파일의 첫 128K 바이트를 메모리로 로드하지만 다음 읽기에서는 16K 청크로만 데이터를 로드합니다. 이는 read_ahead 명령을 사용하여 변경할 수 있습니다.

1.7.11버전 이전에는 aio sendfile;을 사용하여 미리 로드할 수 있었습니다.

Syntax:  sendfile_max_chunk size;
Default: sendfile_max_chunk 2m;
Context: http, server, location

1.21.4버전 이전에는 기본적으로 제한이 없었습니다.

Syntax:  server { ... }
Default: —
Context: http

가상 서버에 대한 구성을 설정합니다. IP 기반(IP 주소 기반)과 이름 기반(“Host” 요청 헤더 필드 기반) 가상 서버는 명확한 구분이 없습니다. 대신 listen 명령이 서버에 대해 연결을 수락해야 하는 모든 주소와 포트를 설명하고 server_name 명령이 모든 서버 이름을 나열합니다. 구성 예시는 “nginx가 요청을 처리하는 방법” 문서에 나와 있습니다.

Syntax:  server_name name ...;
Default: server_name "";
Context: server

가상 서버 이름을 다음과 같이 설정합니다.

server {
    server_name example.com www.example.com;
}

첫 번째 이름이 기본 서버 이름이 됩니다.

서버 이름은 이름의 첫 번째나 마지막 부분을 별표(“*”)로 대체할 수 있습니다.

server {
    server_name example.com *.example.com www.example.*;
}

이런 이름을 와일드카드 이름이라고 합니다.

앞서 언급한 처음의 두 가지 이름은 하나로 결합할 수 있습니다.

server {
    server_name .example.com;
}

이름 앞에 틸데(“~”)를 붙여서 서버 이름에 정규식을 사용할 수 있습니다.

server {
    server_name www.example.com ~^www\d+\.example\.com$;
}

정규식에는 나중에 다른 명령에서 사용할 캡처(0.7.40)를 포함할 수 있습니다.

server {
    server_name ~^(www\.)?(.+)$;

    location / {
        root /sites/$2;
    }
}

server {
    server_name _;

    location / {
        root /sites/default;
    }
}

정규식의 이름 캡처는 나중에 다른 명령에서 사용할 수 있는 변수(0.8.25)를 생성합니다.

server {
    server_name ~^(www\.)?(?<domain>.+)$;

    location / {
        root /sites/$domain;
    }
}

server {
    server_name _;

    location / {
        root /sites/default;
    }
}

명령의 매개변수를 “$hostname”(0.9.4)으로 설정하면, 장비의 호스트 이름을 넣습니다.

빈 서버 이름을 지정할 수 있습니다(0.7.11).

server {
    server_name www.example.com "";
}

이 서버는 기본 서버 대신 특정 주소:포트 쌍에 대해 “Host” 헤더 필드 없이, 요청을 처리할 수 있습니다. 이는 기본 설정입니다.

0.8.48버전 이전에는 장비의 호스트 이름을 기본적으로 사용했습니다.

이름으로 가상 서버를 검색하는 동안 이름이 2개 이상의 지정된 변수와 일치할 경우(와일드카드 이름과 정규식이 모두 일치하는 경우) 다음과 같은 순서대로 처음 일치하는 변수가 선택됩니다.

  1. 정확한 이름
  2. *로 시작하는 가장 긴 와일드카드 이름(예: “*.example.com”)
  3. *로 끝나는 가장 긴 와일드카드 이름(예: “mail.*”)
  4. 처음 일치하는 정규식(구성 파일에 나열된 순서)

서버 이름에 대한 자세한 설명은 별도의 서버 이름 문서에서 제공됩니다.

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

기본 서버 이름 사용을 활성화하거나 비활성화합니다. nginx가 발생시킨 절대 리디렉션에서 server_name 명령으로 지정합니다. 기본 서버 이름 사용을 비활성화한 경우, “Host” 요청 헤더 필드의 이름을 사용합니다. 이 필드가 없을 경우, 서버 IP 주소를 사용합니다.

Syntax:  server_names_hash_bucket_size size;
Default: server_names_hash_bucket_size 32|64|128;
Context: http
Syntax:  server_names_hash_max_size size;
Default: server_names_hash_max_size 512;
Context: http
Syntax:  server_tokens on | off | build | string;
Default: server_tokens on;
Context: http, server, location

오류 페이지 및 “Server” 응답 헤더 필드에서 nginx 버전을 전송하는 작업을 활성화하거나 비활성화합니다.

build 매개변수(1.11.10)는 nginx 버전과 함께 빌드 이름을 전송할 수 있습니다.

또한, 상업용 구독에서는 1.9.13버전부터 오류 페이지의 서명과”Server” 응답 헤더 필드 값을 변수를 포함한 string을 사용하여 명시적으로 설정할 수 있습니다. 빈 문자열은 “Server” 필드 전송을 비활성화합니다.

Syntax:  subrequest_output_buffer_size size;
Default: subrequest_output_buffer_size 4k|8k;
Context: http, server, location
This directive appeared in version 1.13.10.

하위 요청의 응답 본문을 전송하는 데 사용하는 버퍼의 size를 설정합니다. 기본적으로 버퍼 크기는 메모리 페이지 1개와 같습니다. 플랫폼에 따라 4K 또는 8K가 됩니다. 하지만 크기는 더 줄일 수 있습니다.

이 명령은 응답 본문을 메모리에 저장한 하위 요청에만 적용할 수 있습니다. 예를 들어 이러한 하위 요청은 SSI로 생성합니다.

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

TCP_NODELAY 옵션 사용을 활성화하거나 비활성화합니다. 연결을 keep-alive 상태로 전환하면 이 옵션이 활성화됩니다. 또한, SSL 연결에서 버퍼가 없는 프록시와 WebSocket 프록시에 대해 활성화됩니다.

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

FreeBSD에서 TCP_NOPUSH 소켓 옵션, 또는 Linux에서 TCP_CORK 소켓 옵션의 사용을 활성화하거나 비활성화합니다. 이 옵션은 sendfile을 사용할 때만 활성화됩니다. 이 옵션을 사용하면

  • Linux 및 FreeBSD 4에서 요청 헤더와 파일 첫 부분을 패킷 1개로 전송합니다.*;
  • 파일 하나를 전체 패킷으로 전송합니다.
Syntax:  try_files file ... uri;
         try_files file ... =code;
Default: —
Context: server, location

지정된 순서로 파일이 존재하는지 검사하고 첫 번째로 발견된 파일을 요청 처리에 사용합니다. 처리는 현재 컨텍스트에 따라 실행됩니다. 파일 경로는 root 및 alias 명령에 따라 file 매개변수에서 생성됩니다. 이름 끝에 슬래시를 붙이면 디렉터리가 존재하는지 검사할 수 있습니다(예: “$uri/”). 아무 파일도 찾지 못할 경우, 마지막 매개변수에서 설정한 uri로 내부 리디렉션됩니다. 예:

location /images/ {
    try_files $uri /images/default.gif;
}

location = /images/default.gif {
    expires 30s;
}

마지막 매개변수는 이름이 지정된 위치를 가리킬 수도 있습니다. 예를 들어, 다음과 같습니다. 0.7.51버전부터 마지막 매개변수는 code가 될 수도 있습니다.

location / {
    try_files $uri $uri/index.html $uri.html =404;
}

Mongrel 프록시 예시:

location / {
    try_files /system/maintenance.html
              $uri $uri/index.html $uri.html
              @mongrel;
}

location @mongrel {
    proxy_pass http://mongrel;
}

Drupal/FastCGI 예시:

location / {
    try_files $uri $uri/ @drupal;
}

location ~ \.php$ {
    try_files $uri @drupal;

    fastcgi_pass ...;

    fastcgi_param SCRIPT_FILENAME /path/to$fastcgi_script_name;
    fastcgi_param SCRIPT_NAME     $fastcgi_script_name;
    fastcgi_param QUERY_STRING    $args;

    ... other fastcgi_param's
}

location @drupal {
    fastcgi_pass ...;

    fastcgi_param SCRIPT_FILENAME /path/to/index.php;
    fastcgi_param SCRIPT_NAME     /index.php;
    fastcgi_param QUERY_STRING    q=$uri&$args;

    ... other fastcgi_param's
}

다음의 예시에서

location / {
    try_files $uri $uri/ @drupal;
}

try_files 명령은 다음과 같습니다.

location / {
    error_page 404 = @drupal;
    log_not_found off;
}

이 경우,

location ~ \.php$ {
    try_files $uri @drupal;

    fastcgi_pass ...;

    fastcgi_param SCRIPT_FILENAME /path/to$fastcgi_script_name;

    ...
}

try_files은 PHP 파일이 있는지 확인한 다음, 요청을 FastCGI 서버로 전달합니다.

WordPress 및 Joomla 예시:

location / {
    try_files $uri $uri/ @wordpress;
}

location ~ \.php$ {
    try_files $uri @wordpress;

    fastcgi_pass ...;

    fastcgi_param SCRIPT_FILENAME /path/to$fastcgi_script_name;
    ... other fastcgi_param's
}

location @wordpress {
    fastcgi_pass ...;

    fastcgi_param SCRIPT_FILENAME /path/to/index.php;
    ... other fastcgi_param's
}
Syntax:  types { ... }
Default: types {
             text/html  html;
             image/gif  gif;
             image/jpeg jpg;
         }
Context: http, server, location

파일 이름 확장자를 MIME 유형의 응답에 매핑합니다. 확장자는 대소문자를 구분합니다. 다음과 같이 여러 확장자를 하나의 유형에 매핑할 수 있습니다.

types {
    application/octet-stream bin exe dll;
    application/octet-stream deb;
    application/octet-stream dmg;
}

nginx에서 충분히 채운 매핑 테이블을 conf/mime.types 파일에 배포합니다.

특정 위치에서 모든 요청에 대해 “application/octet-stream” MIME 유형을 전송하도록 하려면 다음의 구성을 사용할 수 있습니다.

location /download/ {
    types        { }
    default_type application/octet-stream;
}
Syntax:  types_hash_bucket_size size;
Default: types_hash_bucket_size 64;
Context: http, server, location

유형 해시 테이블의 버킷 용량을 설정합니다. 해시 테이블을 설정하는 세부 정보는 별도의 문서에서 제공합니다.

1.5.13버전부터 기본값은 프로세서 캐시 행의 크기에 따라 달라집니다.

Syntax:  types_hash_max_size size;
Default: types_hash_max_size 1024;
Context: http, server, location

유형 해시 테이블의 최대 size를 설정합니다. 해시 테이블을 설정하는 세부 정보는 별도의 문서에서 제공합니다.

Syntax:  underscores_in_headers on | off;
Default: underscores_in_headers off;
Context: http, server

클라이언트 요청 헤더 필드에서 밑줄 사용을 활성화하거나 비활성화합니다. 밑줄 사용을 비활성화한 경우, 이름에 밑줄이 있는 요청 헤더 필드는 유효하지 않은 것으로 표시되고 ignore_invalid_headers 명령을 적용합니다.

Syntax:  variables_hash_bucket_size size;
Default: variables_hash_bucket_size 64;
Context: http
Syntax:  variables_hash_max_size size;
Default: variables_hash_max_size 1024;
Context: http

변수 해시 테이블의 최대 size를 설정합니다. 해시 테이블을 설정하는 세부 정보는 별도의 문서에서 제공합니다.

버전 1.5.13 이전에는 기본값이 512이었습니다.

임베디드 변수

ngx_http_core_module 모듈은 Apache Server 변수와 이름이 일치하는 포함된 변수를 지원합니다. 먼저 이들은 클라이언트 요청 헤더 필드를 나타내는 변수입니다(예: $http_user_agent, $http_cookie). 다른 변수도 있습니다.

$arg_name

요청 행의 인수 name in the request line

$args

요청 행의 인수

$binary_remote_addr

바이너리 형식의 클라이언트 주소 값의 길이는 항상 IPv4 주소의 경우 4바이트, IPv6 주소의 경우 16바이트

$body_bytes_sent

응답 헤더를 반영하지 않은 클라이언트로 전송된 바이트 용량. 이 변수는 mod_log_config Apache 모듈의 “%B” 매개변수와 호환됩니다.

$bytes_sent

클라이언트로 전송된 바이트 용량(1.3.8, 1.2.5)

$connection

연결 일련번호(1.3.8, 1.2.5)

$connection_requests

연결을 통해 보낸 요청 수(1.3.8, 1.2.5)

$connection_time

연결 시간(초), ms 단위까지 표시(1.19.10)

$content_length

“Content-Length” 요청 헤더 필드

$content_type

“Content-Type” 요청 헤더 필드

$cookie_name

name 쿠키

$document_root

현재 요청에 대한 root 또는 alias 명령 값

$uri와 동일

$host

우선순위: 요청 행의 호스트 이름, 또는 “Host” 요청 헤더 필드의 호스트 이름, 또는 요청과 일치하는 서버 이름

$hostname

호스트 이름

$http_name

임의의 요청 헤더 필드. 변수 이름의 마지막 부분은 밑줄로 대시를 교체하고 소문자로 변환한 필드 이름입니다.

연결이 SSL 모드에서 작동할 경우 “on”, 그 외에 다른 경우에는 빈 문자열

$is_args

요청 행에 인수가 있을 경우 “?”, 그 외에 다른 경우에는 빈 문자열

$limit_rate

이 변수를 설정하면 응답 속도가 제한됩니다. limit_rate를 참조하세요.

$msec

연결 시간(초), ms 단위까지 표시(1.3.9, 1.2.6)

$nginx_version

nginx 버전

$pid

작업자 프로세스의 PID

$pipe

“p”(요청이 파이프라인화된 경우), “.”(그 외의 다른 경우)(1.3.12, 1.2.7)

$proxy_protocol_addr

PROXY 프로토콜 헤더의 클라이언트 주소(1.5.12)

PROXY 프로토콜은 listen 명령에서 proxy_protocol 매개변수를 설정하여 미리 활성화해야 합니다.

$proxy_protocol_port

PROXY 프로토콜 헤더의 클라이언트 포트(1.11.0)

PROXY 프로토콜은 listen 명령에서 proxy_protocol 매개변수를 설정하여 미리 활성화해야 합니다.

$proxy_protocol_server_addr

PROXY 프로토콜 헤더의 서버 주소(1.17.6)

PROXY 프로토콜은 listen 명령에서 proxy_protocol 매개변수를 설정하여 미리 활성화해야 합니다.

$proxy_protocol_server_port

PROXY 프로토콜 헤더의 서버 포트(1.17.6)

PROXY 프로토콜은 listen 명령에서 proxy_protocol 매개변수를 설정하여 미리 활성화해야 합니다.

$query_string

$args와 동일

$realpath_root

$remote_addr

클라이언트 주소 

$remote_port

클라이언트 포트 

$remote_user

기본 인증으로 제공된 사용자 이름

$request

전체 원본 요청 행

$request_body

요청 본문. 변수 이름은 요청 본문을 메모리 버퍼로 읽었을 때 proxy_pass, fastcgi_pass, uwsgi_pass 및 scgi_pass에서 처리하는 위치에서 제공됩니다.

$request_body_file

요청 본문이 있는 임시 파일 이름

처리가 끝날 때 파일 제거 필요 요청 본문을 항상 파일로 작성하려면 client_body_in_file_only를 활성화해야 합니다. 임시 파일 이름을 프록시된 요청이나 FastCGI/uwsgi/SCGI 서버에 대한 요청에서 전달할 경우, 요청 본문 전송은 각각 proxy_pass_request_body off, fastcgi_pass_request_body off, uwsgi_pass_request_body off, scgi_pass_request_body off 명령으로 비활성화해야 합니다.

$request_completion

요청이 완료된 경우 “OK”, 그 외에 다른 경우 빈 문자열

$request_filename

$request_id

16개 랜덤 바이트로 생성한 16진수 고유 요청 식별자(1.11.0)

$request_length

$request_method

요청 메서드, 일반적으로 “GET” 또는 “POST”

$request_time

요청 처리 시간(초), ms 단위까지 표시(1.3.9, 1.2.6). 첫 바이트를 클라이언트에서 읽은 이후로 경과한 시간

$request_uri

전체 원본 요청 URI(인수 포함)

$scheme

요청 체계 “http” 또는 “https”

$sent_http_name

임의의 응답 헤더 필드. 변수 이름의 마지막 부분은 밑줄을 대시로 교체하고 소문자로 변환한 필드 이름입니다.

$sent_trailer_name

응답 끝에 전송한 임의의 필드(1.13.2). 변수 이름의 마지막 부분은 대시를 밑줄로 교체하고 소문자로 변환한 파일 이름입니다.

$server_addr

요청을 수락한 서버 주소

이 변수 값을 계산하려면 일반적으로 시스템 호출을 한 번 보내야 합니다. 시스템 호출을 보내지 않으려면 listen 명령에서 주소를 지정하고 bind 매개변수를 사용해야 합니다.

$server_name

요청을 수락한 서버 이름

$server_port

요청을 수락한 서버의 포트

$server_protocol

요청 프로토콜, 일반적으로 “HTTP/1.0”, “HTTP/1.1” 또는 “HTTP/2.0”

$status

응답 상태(1.3.2, 1.2.2)

$tcpinfo_rtt$tcpinfo_rttvar$tcpinfo_snd_cwnd$tcpinfo_rcv_space

클라이언트 TCP 연결에 대한 정보, TCP_INFO 소켓 옵션을 지원하는 시스템에 제공

$time_iso8601

ISO 8601 표준 형식의 로컬 시간(1.3.12, 1.2.7)

$time_local

공통 로그 형식의 로컬 시간(1.3.12, 1.2.7)

$uri

요청의 현재 URI, 정규화됨

$uri 값은 요청 처리 중(예: 내부 리디렉션, 인덱스 파일 사용 중)에 변경될 수 있습니다.