ngx_stream_proxy_module

ngx_stream_proxy_module 모듈(1.9.0)을 사용하면 TCP, UDP(1.9.13) 및 UNIX 도메인 소켓에 대해 데이터 스트림을 프록시할 수 있습니다.

예제 구성

server {
    listen 127.0.0.1:12345;
    proxy_pass 127.0.0.1:8080;
}

server {
    listen 12345;
    proxy_connect_timeout 1s;
    proxy_timeout 1m;
    proxy_pass example.com:12345;
}

server {
    listen 53 udp reuseport;
    proxy_timeout 20s;
    proxy_pass dns.example.com:53;
}

server {
    listen [::1]:12345;
    proxy_pass unix:/tmp/stream.socket;
}

Directives

Syntax:	 proxy_bind address [transparent] | off;
Default: —
Context: stream, server
This directive appeared in version 1.9.2.

지정된 로컬 IP address에서 프록시된 서버로 나가는 연결을 설정합니다. 매개변수 값은 변수를 포함할 수 있습니다(1.11.2). 특수 값 off는 이전 구성 수준에서 상속한 proxy_bind 명령의 효과를 상쇄하여, 시스템에서 로컬 IP 주소를 자동 할당하도록 합니다.

transparent 매개변수(1.11.0)를 사용하면 외부 IP 주소에서 프록시된 서버로 나가는 연결을 허용할 수 있습니다. 예를 들어, 클라이언트의 실제 IP 주소를 사용할 수 있습니다.

proxy_bind $remote_addr transparent;

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

Syntax:  proxy_buffer_size size;
Default: proxy_buffer_size 16k;
Context: stream, server
This directive appeared in version 1.9.4.

Syntax:  proxy_connect_timeout time;
Default: proxy_connect_timeout 60s;
Context: stream, server

프록시된 서버와의 연결을 설정하는 데 적용할 제한 시간을 정의합니다.

Syntax:  proxy_download_rate rate;
Default: proxy_download_rate 0;
Context: stream, server
This directive appeared in version 1.9.3.

프록시된 서버에서 데이터를 읽는 속도를 제한합니다. rate는 1초당 바이트로 지정됩니다. 0 값은 속도 제한을 비활성화합니다. 제한은 연결별로 설정되므로, nginx가 프록시된 서버에 대한 연결 2개를 동시에 열면 전체 속도는 지정된 제한의 두 배가 됩니다.

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

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

proxy_download_rate $rate;
Syntax:  proxy_half_close on | off;
Default: proxy_half_close off;
Context: stream, server
This directive appeared in version 1.21.4.

TCP 연결의 각 방향을 독립적으로 활성화하거나 비활성화합니다(“TCP 하프 종료”). 이 설정을 활성화하면 TCP에 대한 프록시는 양쪽 연결이 종료될 때까지 유지됩니다.

Syntax:  proxy_next_upstream on | off;
Default: proxy_next_upstream on;
Context: stream, server

프록시된 서버에 대한 연결을 설정할 수 없을 경우, 클라이언트 연결을 다음 서버로 연결할지 결정합니다.

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

Syntax:  proxy_next_upstream_timeout time;
Default: proxy_next_upstream_timeout 0;
Context: stream, server

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

Syntax:  proxy_next_upstream_tries number;
Default: proxy_next_upstream_tries 0;
Context: stream, server

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

Syntax:	 proxy_pass address;
Default: —
Context: server

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

proxy_pass localhost:12345;

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

proxy_pass unix:/tmp/stream.socket;

도메인 이름이 여러 주소로 변환되는 경우, 모두 순환 방식으로 사용됩니다. 또한, 주소는 서버 그룹으로 지정할 수 있습니다.

주소는 변수를 사용하여 지정할 수도 있습니다(1.11.3).

proxy_pass $upstream;

이 경우, 서버 이름을 기술된 서버 그룹에서 검색하고, 이를 찾을 수 없을 경우 resolver를 사용하여 확인합니다.

Syntax:  proxy_protocol on | off;
Default: proxy_protocol off;
Context: stream, server
This directive appeared in version 1.9.2.

프록시된 서버 연결에 대한 PROXY 프로토콜을 활성화합니다.

Syntax:  proxy_requests number;
Default: proxy_requests 0;
Context: stream, server
This directive appeared in version 1.15.7.

클라이언트와 기존 UDP 세션 사이의 바인딩이 취소되는 클라이언트 데이터그램 수를 설정합니다. 일정 수의 데이터그램을 수신한 뒤에는 동일한 클라이언트에서 다음 데이터그램이 새 세션을 시작합니다. 모든 클라이언트 데이터그램이 프록시된 서버에 전송되고 예상한 개수만큼 응답을 수신하거나, 시간제한에 도달하면 세션을 종료합니다.

Syntax:  proxy_responses number;
Default: —
Context: stream, server
This directive appeared in version 1.9.13.

UDP 프로토콜을 사용한 경우 클라이언트 데이터그램에 대해 프록시된 서버에서 예상하는 데이터그램 수를 설정합니다. 이 숫자는 세션 종료 힌트 역할을 합니다. 기본적으로 데이터그램 수는 제한되지 않습니다.

0 값을 지정한 경우, 예상되는 응답은 없습니다. 그러나 응답을 수신했지만 세션이 종료되지 않은 경우, 응답이 처리됩니다.

Syntax:  proxy_session_drop on | off;
Default: proxy_session_drop off;
Context: stream, server
This directive appeared in version 1.15.8.

프록시된 서버를 그룹에서 제거하거나 영구적으로 사용하지 못하게 표시한 이후에는 프록시된 서버에 대한 모든 세션을 종료하도록 합니다. 이는 다시 변환하거나 API DELETE 명령을 사용할 때 발생할 수 있습니다. 서버는 비정상으로 간주되거나 API PATCH 명령을 사용할 때 영구적 사용 불가로 표시될 수 있습니다. 클라이언트 또는 프록시된 서버에 대해 다음 읽기/쓰기 이벤트를 처리할 때 각 세션이 종료됩니다.

이 명령은 상업용 구독에서 제공합니다.

Syntax:  proxy_socket_keepalive on | off;
Default: proxy_socket_keepalive off;
Context: stream, server
This directive appeared in version 1.15.6.

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

Syntax:  proxy_ssl on | off;
Default: proxy_ssl off;
Context: stream, server

프록시된 서버 연결에 대해 SSL/TLS 프로토콜을 활성화합니다.

Syntax:  proxy_ssl_certificate file;
Default: —
Context: stream, server

프록시된 서버 인증에 사용하기 위한 PEM 형식의 인증서가 포함된 file을 지정합니다.

1.21.0버전 이후로 file 이름에 변수를 사용할 수 있습니다.

Syntax:  proxy_ssl_certificate_key file;
Default: —
Context: stream, server

프록시된 서버 인증에 사용하기 위한 PEM 형식의 시크릿 키가 포함된 file을 지정합니다.

1.21.0버전 이후로 file 이름에 변수를 사용할 수 있습니다.

Syntax:  proxy_ssl_ciphers ciphers;
Default: proxy_ssl_ciphers DEFAULT;
Context: stream, server

프록시된 서버 연결에 대해 활성화된 암호를 지정합니다. 이 암호는 OpenSSL 라이브러리에서 이해하는 형식으로 지정합니다.

전체 목록은 “openssl ciphers” 명령을 사용하여 확인할 수 있습니다.

Syntax:  proxy_ssl_conf_command command;
Default: —
Context: stream, server
This directive appeared in version 1.19.4.

프록시된 서버로 연결을 설정할 때 임의의 OpenSSL 구성 명령을 설정합니다.

이 명령은 OpenSSL 1.0.2 이상을 사용할 때 지원됩니다.

동일한 수준에서 여러 proxy_ssl_conf_command 명령을 지정할 수 있습니다. 이러한 명령은 현재 수준에서 proxy_ssl_conf_command 명령이 정의되지 않은 경우에만 이전 구성에서 상속합니다.

OpenSSL을 직접 구성하면 예상치 못한 동작이 발생할 수 있습니다.

Syntax:  proxy_ssl_crl file;
Default: —
Context: stream, server

프록시된 서버의 인증서를 인증하는 데 사용한 취소된 인증서(CRL)를 PEM 형식으로 포함한 file을 지정합니다.

Syntax:  proxy_ssl_name name;
Default: proxy_ssl_name host from proxy_pass;
Context: stream, server

프록시된 서버 인증서를 인증하는 데 사용하고 프록시된 서버와의 연결을 설정할 때 SNI를 통해 전달되는 서버 이름을 재정의할 수 있습니다. 서버 이름은 변수를 사용하여 지정할 수도 있습니다(1.11.3).

기본적으로 proxy_pass 주소의 호스트 부분을 사용합니다.

Syntax:  proxy_ssl_password_file file;
Default: —
Context: stream, server

시크릿 키에 대한 패스프레이즈가 포함된 file을 지정합니다. 각 패스프레이즈는 별도의 행으로 지정합니다. 키를 로딩할 때 순서대로 패스프레이즈를 시도합니다.

Syntax:  proxy_ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2] [TLSv1.3];
Default: proxy_ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
Context: stream, server

프록시된 서버 연결에 지정된 프로토콜을 활성화합니다.

Syntax:  proxy_ssl_server_name on | off;
Default: proxy_ssl_server_name off;
Context: stream, server

프록시된 서버와 연결을 설정할 때 TLS Server Name Indication 확장 프로그램(SNI, RFC 6066)을 통해 서버 이름을 전달하도록 활성화하거나 비활성화합니다.

Syntax:  proxy_ssl_session_reuse on | off;
Default: proxy_ssl_session_reuse on;
Context: stream, server

프록시된 서버와 작업 시 SSL 세션을 다시 사용할 수 있는지 결정합니다. 로그에 “SSL3_GET_FINISHED:digest check failed” 오류가 나타날 경우 세션 재사용을 비활성화해보세요.

Syntax:  proxy_ssl_trusted_certificate file;
Default: —
Context: stream, server

프록시된 서버의 인증서를 인증하는 데 사용된 신뢰할 수 있는 CA 인증서를 PEM 형식으로 포함한 file을 지정합니다.

Syntax:  proxy_ssl_verify on | off;
Default: proxy_ssl_verify off;
Context: stream, server

프록시된 서버 인증서의 인증을 활성화하거나 비활성화합니다.

Syntax:  proxy_ssl_verify_depth number;
Default: proxy_ssl_verify_depth 1;
Context: stream, server

프록시된 서버 인증서 체인에서 인증 깊이를 설정합니다.

Syntax:  proxy_timeout timeout;
Default: proxy_timeout 10m;
Context: stream, server

클라이언트 또는 프록시된 서버 연결에서 두 개의 연속적 읽기 또는 쓰기 작업 사이의 timeout을 설정합니다. 이 시간 동안 전송되는 데이터가 없을 경우, 연결이 종료됩니다.

Syntax:  proxy_upload_rate rate;
Default: proxy_upload_rate 0;
Context: stream, server
This directive appeared in version 1.9.3.

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

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

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

proxy_upload_rate $rate;