Key-Value Store

  • NGINX+기능
  • NGINX Plus 의 InMemory DB 활용, 일부 데이터 값 기입

공식 정보

활용 용도

  • IP Allow/Deny List
  • 인증서 등록하여 활용 ( 별도 File 로 저장하는 것이 아닌, 메모리 내에 저장 )
    • 별도FIle 로도 관리 가능
    • 별도의 server_name 설정 없이, 인증서 여러개 저장 후, 자동으로 SSL 처리

How to Usage Key-Value Store

Keyval

  • key-value 데이터베이스의 키로 값을 조회하는 새 $variable을 생성

  • Sample

    keyval $remote_addr $target zone=allowlist_zone;
    # allowlist_zone 의 KeyVal_zone 에 저장된 $target 을 NGINX 에서 $remote_addr 변수로 활용


Keyval_zone

  • key-value 데이터베이스를 유지하는 공유 메모리 영역의 이름과 크기를 설정

  • 해당 항목애 Key : Value 형태로 데이터 저장 ( {”Value#1”,”Value#2”}  )

  • Sample

    #keyval_zone zone=name:size [state=file] [timeout=time] [type=string|ip|prefix] [sync];
    keyval_zone zone=allowlist_zone:1m type=ip state=/var/lib/nginx/state/one.keyval;


Key-Value Store 값 저장 방법

API 활용 값 저장


Sample Use-Case

Sample Code

  • Code

    # IP ACL

    keyval_zone zone=allowlist_zone:1m type=ip state=allowlist_zone.keyval; 

    keyval $remote_addr $target zone=allowlist_zone;


    # SSL 

    keyval_zone zone=ssl_crt:10m; # Key-value store for certificate data

    keyval_zone zone=ssl_key:10m; # Key-value store for private key data


    keyval $ssl_server_name $crt_pem zone=ssl_crt; # Use SNI as key to obtain cert

    keyval $ssl_server_name $key_pem zone=ssl_key;



Key-Value Store with IP ACL List

  • Key-Value Store 에 있는 IP 에 대해서 Allow /Deny 설정
  • Code

  • keyval_zone zone=allowlist_zone:1m type=ip

    state=/var/lib/nginx/state/allowlist_zone.keyval;


    server {

        listen 8443;

        index index.html;


        if ($target = 1) {

            return 403;

        }

        location / {

            root /opt/services/App1;

        }

    }


    ###Key-Value Store

    #curl -X POST -d '{"10.250.11.99":"1"}' -s http://localhost:8005/api/6/http/keyvals/allowlist_zone

    #curl -X GET http://127.0.0.1:8005/api/6/http/keyvals/allowlist_zone