Upstream Domain Resolve | NGINX

Upstream Domain Resolve Description ngx_upstream_jdomain - an upstream module that resolves an upstream domain name asynchronously. Its buffer has the latest IPs of the backend domain name and it integrates with the configured load balancing algorithm (lea

www.nginx.com

 

 

GitHub - nicholaschiasson/ngx_upstream_jdomain: An asynchronous domain name resolution module for nginx upstream.

An asynchronous domain name resolution module for nginx upstream. - GitHub - nicholaschiasson/ngx_upstream_jdomain: An asynchronous domain name resolution module for nginx upstream.

github.com

 

ngx_upstream_jdomain 모듈이란

  • ngx_upstream_jdomain 모듈은 nginx 업스트림 도메인 네임을 비동기적으로 확인하는 업스트림 모듈
  • 업스트림 블록에서 도메인 이름을 사용할 수 있으며 도메인 이름이 동적으로 확인 → 업스트림이 DNS 항목 업데이트에 탄력적으로 대응 가능
  • ngx_upstream_jdomain 모듈은 일정 간격으로 DNS 확인을 자동으로 수행하지 않음 → 주어진 업스트림에 대한 요청에 따라 DNS 확인
  • nginx가 jdomain 업스트림에 바인딩된 연결을 제공하고 구성된 간격(interval)이 경과한 경우 모듈은 DNS 조회를 수행함

 

  • ngx_upstream_jdomain 모듈은 다른 업스트림 범위(upstream scope) 지시어와 호환
    1. 여러 jdomain 지시어(multiple jdomain directives)
    2. 여러 서버 지시어(multiple server directives)
    3. keepalive
    4. 로드 밸런싱 지시어(load balancing directives)
    5. 등등(etc.)

 

  • 업스트림 블록에 다른 로드 밸런싱 방법을 지정하지 않는 한 ngx_upstream_jdomain 모듈은 nginx 코어에 내장된 기본 라운드 로빈 로드 밸런싱 알고리즘을 사용
  • 버퍼에는 백엔드 도메인 이름(backend domain name)의 최신 IP가 구성되어 있으며, 로드 밸런싱 알고리즘(최소_conn, 해시 등) 또는 명시적으로 정의되지 않은 경우 내장된 라운드 로빈과 통합함
  • 매 간격(기본값은 1초)마다 도메인 이름을 확인(질의)
  • 도메인 네임을 확인하지 못하면 버퍼는 마지막으로 성공적으로 확인된 IP를 유지하거나 사용자가 지정한 백업 서버 IP를 사용

 

 

※ 대체 로드 밸런싱 알고리즘(alternate load balancing algorithm)을 지정하는 경우 업스트림 블록의 jdomain 지시어 앞에 지정 필요

  • 앞에 지정하지 않는 경우 런타임 중에 nginx가 충돌 발생
  • 많은 로드 밸런싱 모듈이 내장된 라운드 로빈을 명시적으로 확장
  • jdomain 지시어 이후에 대체 로드 벨런싱 알고리즘을 지정하면, jdomain 초기화 핸들러를 방해 → jdomain은 로드 밸런서 모듈
  • 단, 모든 로드 밸런서 모듈에 해당하는 것은 아니지만, 안전을 위해 jdomain을 뒤에 배치하는 것이 좋음(jdomain 앞에 대체 로드 밸런싱 알고리즘 취이 필요)

 

※ ngx_upstream_jdomain 모듈의 비차단 특성(non blocking nature)과 들어오는 요청에 의해 DNS resolve 트리거

  • resolve를 요청하는 트리거는 실제로는 DNS 조회가 발생하기 전에 확인되어 캐시된 업스트림으로 전달
  • 시나리오에 따라 업스트림의 상태를 변경할 때 일회성 장애가 발생할 수 있음
  • 업스트림의 원활한 전환을 보장하기 위해 염두에 두어야 함

 

 

ngx_upstream_jdomain 시놉시스(Synopsis)

1. ngx_upstream_jdomain 문법

jdomain <domain-name> [port=80] [max_ips=4] [interval=1] [strict]

 

2. nginx_upstream_jdomain 위치

  • Context: upstream

 

3. nginx_upstream_jdomain 속성 설명

속성 설명
port - 백엔드의 listen 포트
- Default: 80
max_ips - IP 버퍼 크기(IP buffer size)
- 캐시할 최대 확인된 IP 수
- Default: 4
interval - 도메인 이름 resolve 걸리는 시간(초)
- Default: 1
ipver - 정의된 경우 패밀리 IPv4 또는 IPv6 주소만 사용
- Default: 0
strict - DNS resolve이 성공하고 주소를 반환해야 함
- 그렇지 않으면 기본 서버와 피어(server and peers)를 다운으로 표시하고 업스트림 블록에 다른 서버가 있는 경우 강제로 사용

- 확인 실패 경우
  1. timeout
  2. DNS server failure
  3. connection refusals
  4. response with no addresses

 

 

ngx_upstream_jdomain 모듈 설치(Installation)

 

 

ngx_upstream_jdomain 사용 예시

resolver 8.8.8.8; # Your Local DNS Server

# Basic upstream using domain name defaulting to port 80.
upstream backend_01 {
    jdomain example.com;
}

# Basic upstream specifying different port.
upstream backend_02 {
    jdomain example.com port=8080;
}

# Upstream with a backup server to use in case of host not found or format
# errors on DNS resolution.
upstream backend_03 {
    server 127.0.0.2 backup;
    jdomain example.com;
}

# Upstream which will use backup for any and all DNS resolution errors.
upstream backend_04 {
    server 127.0.0.2 backup;
    jdomain example.com strict;
}

# Upstream which will use backup for any and keepalive.
upstream backend_05 {
    server 127.0.0.2:55555 backup;
    jdomain example.com;
    keepalive 8;
}

server {
    listen 127.0.0.2:80;
    return 502 'An error.';
}

 

 

'Nginx > Nginx 모듈 학습' 카테고리의 다른 글

ngx_http_split_clients_module 모듈  (0) 2023.09.22
ngx_http_sub_module 모듈  (0) 2023.09.22
ngx_http_image_filter_module 모듈  (0) 2023.09.21
ngx_http_gzip_static_module 모듈  (1) 2023.09.21
ngx_http_gunzip_module 모듈  (0) 2023.09.21

+ Recent posts