ngx_http_v2_module
ngx_http_v2_module 모듈(1.9.5)은 HTTP/2를 지원하고 ngx_http_spdy_module 모듈을 대체합니다.
이 모듈은 기본적으로 구축되지 않으므로, –with-http_v2_module 구성 매개변수로 활성화해야 합니다.
알려진 이슈
1.9.14버전 이전에는 proxy_request_buffering, fastcgi_request_buffering, uwsgi_request_buffering 및 scgi_request_buffering 명령 값과 관계없이 클라이언트 요청 본문의 버퍼링을 비활성화할 수 없었습니다.
1.19.1버전 이전에는 lingering_close 메커니즘을 사용하여 HTTP/2 연결을 닫지 않았습니다.
예제 구성
server {
listen 443 ssl http2;
ssl_certificate server.crt;
ssl_certificate_key server.key;
}
TLS를 통해 HTTP/2 연결을 수신하려면 “Application-Layer Protocol Negotiation”(ALPN) TLS 확장 프로그램 지원이 필요하며, 이는 OpenSSL 1.0.2버전 이후로 제공합니다.
또한, ssl_prefer_server_ciphers 명령을 “on” 값으로 설정하면 RFC 7540, 부록 A 블랙리스트를 준수하고 클라이언트에서 지원하도록 암호를 구성해야 합니다.
Directives
Syntax: http2_body_preread_size size;
Default: http2_body_preread_size 64k;
Context: http, server
This directive appeared in version 1.11.0.
본문을 처리하기 시작하기 전에 저장할 수도 있는 각 요청의 버퍼 size를 설정합니다.
Syntax: http2_chunk_size size;
Default: http2_chunk_size 8k;
Context: http, server, location
청크의 최대 용량을 응답 본문을 슬라이스하는 단위로 설정합니다. 이 값이 지나치게 낮으면 오버헤드가 높아집니다. 이 값이 지나치게 높으면 HOL 차단으로 인해 우선순위 설정이 영향을 받습니다.
Syntax: http2_idle_timeout time;
Default: http2_idle_timeout 3m;
Context: http, server
이 명령은 1.19.7버전 이후로 사용이 중단되었습니다. 대신 keepalive_timeout 명령을 사용해야 합니다.
연결이 닫힌 이후에 활동이 없는 시간의 제한을 설정합니다.
Syntax: http2_max_concurrent_pushes number;
Default: http2_max_concurrent_pushes 10;
Context: http, server
This directive appeared in version 1.13.9.
연결에서 최대 동시 푸시 요청 수를 제한합니다.
Syntax: http2_max_concurrent_streams number;
Default: http2_max_concurrent_streams 128;
Context: http, server
연결에서 최대 동시 HTTP/2 스트림을 설정합니다.
Syntax: http2_max_field_size size;
Default: http2_max_field_size 4k;
Context: http, server
이 명령은 1.19.7버전 이후로 사용이 중단되었습니다. 대신 large_client_header_buffers 명령을 사용해야 합니다.
HPACK에서 압축한 요청 헤더 필드의 최대 크기를 제한합니다. 이 제한은 이름과 값에 모두 적용됩니다. Huffman 인코딩을 적용하는 경우, 압축이 해제된 이름과 값 문자열의 실제 용량은 더 클 수 있습니다. 대부분 요청의 경우, 기본 제한으로 충분합니다.
Syntax: http2_max_header_size size;
Default: http2_max_header_size 16k;
Context: http, server
이 명령은 1.19.7버전 이후로 사용이 중단되었습니다. 대신 large_client_header_buffers 명령을 사용해야 합니다.
HPACK 압축 해제 이후 전체 요청 헤더 목록의 최대 용량을 제한합니다. 대부분 요청의 경우, 기본 제한으로 충분합니다.
Syntax: http2_max_requests number;
Default: http2_max_requests 1000;
Context: http, server
This directive appeared in version 1.11.6.
이 명령은 1.19.7버전 이후로 사용이 중단되었습니다. 대신 keepalive_requests 명령을 사용해야 합니다.
HTTP/2 연결을 통해 제공할 수 있는 요청(푸시 요청 포함)의 최대 개수를 설정합니다. 그 이후에 다음 클라이언트 요청에서 연결을 닫고 새 연결을 설정해야 합니다.
각 연결에 할당된 메모리를 해제하려면 정기적으로 연결을 닫아야 합니다. 그러므로 지나치게 요청 수가 많으면 과도한 메모리를 사용할 수 있으므로, 권장하지 않습니다.
Syntax: http2_push uri | off;
Default: http2_push off;
Context: http, server, location
This directive appeared in version 1.13.9.
원본 요청에 대한 응답과 함께 지정된 uri에 대한 요청을 미리 전송(푸시)합니다. 절대 경로가 있는 상대적 URI만 처리되며, 예를 들어 다음과 같습니다.
http2_push /static/css/main.css;
uri 값에는 변수를 포함할 수 있습니다.
동일한 구성 수준에서 여러 http2_push 명령을 지정할 수 있습니다. off 매개변수가 이전 구성 수준에서 상속한 http2_push 명령의 효과를 상쇄합니다.
Syntax: http2_push_preload on | off;
Default: http2_push_preload off;
Context: http, server, location
This directive appeared in version 1.13.9.
“Link” 응답 헤더 필드에 지정된 사전 로드 링크를 푸시 요청으로 자동 전환하도록 지원합니다.
Syntax: http2_recv_buffer_size size;
Default: http2_recv_buffer_size 256k;
Context: http
작업자 입력 버퍼당 용량을 설정합니다.
Syntax: http2_recv_timeout time;
Default: http2_recv_timeout 30s;
Context: http, server
이 명령은 1.19.7버전 이후로 사용이 중단되었습니다. 대신 client_header_timeout 명령을 사용해야 합니다.
클라이언트에서 추가 데이터를 기다리는 시간에 제한을 설정합니다. 그 이후에는 연결이 종료됩니다.
임베디드 변수
ngx_http_v2_module 모듈은 다음의 임베디드 변수를 지원합니다.
$http2
협상된 프로토콜 식별자: TLS에 대한 HTTP/2의 경우 “h2″이고, 평문 TCP에 대한 HTTP/2의 경우 “h2c”이며, 그 외에 다른 경우에는 빈 문자열이 됩니다.