본문 바로가기

DevOps/NGINX

NGINX MSA 디지털 트레이닝 - 1강. Context Logic

반응형

NGINX에서 제공하는 디지털 트레이닝 코스 수강 하면서 정리한 내용이다.

1. NGINX 기본 명령어

  • Version 확인 : nginx -v
    [browndwarf@mymachine nginx]$ nginx -v
    nginx version: nginx/1.18.0
  • 설정파일 syntax 유효성 검사 : nginx -t
    [browndwarf@mymachine nginx]$ nginx -t
    nginx: the configuration file /home1/irteam/apps/nginx-1.18.0/conf/nginx.conf syntax is ok
    nginx: configuration file /home1/irteam/apps/nginx-1.18.0/conf/nginx.conf test is successful
  • 현재 NGINX Instance의 설정 내용 확인 : nginx -T
    [browndwarf@mymachine nginx]$ nginx -T
    nginx: the configuration file /home1/irteam/apps/nginx-1.18.0/conf/nginx.conf syntax is ok
    nginx: configuration file /home1/irteam/apps/nginx-1.18.0/conf/nginx.conf test is successful
    # configuration file /home1/irteam/apps/nginx-1.18.0/conf/nginx.conf:
    user  irteam;
    worker_processes  2;
    ...
    events {
      worker_connections  2048;
    }
    ...
    # configuration file /home1/irteam/apps/nginx-1.18.0/conf/mime.types:
    types {
      text/html                                        html htm shtml;
      text/css                                         css;
      text/xml                                         xml;
      image/gif                                        gif;
      image/jpeg                                       jpeg jpg;
      application/javascript                           js;
    ...
    }
  • 설정 Reload : nginx -s reload
  • Gracefule Shutdown : nginx -s quit
  • Fast Shutdown : nginx -s stop

2. NGINX 설정 파일 위치

  • Main 설정 파일 : /etc/nginx/nginx.conf
  • 추가 설정 파일 위치 : /etc/nginx/conf.d/*.conf
    - 여기에 포함된 설정 파일들을 nginx.conf에서 include 명령어로 포함시켜 설정에 반영시킨다.
  • NGINX 설정은 Context와 Directives(명령어)의 조합으로 구성되어 있다.

3. Configuration Context

  • Context 구조

  • Main Context

    • 최상위 Level에서 worker process의 수, Linux Username, Process ID, Log file location 등을 정의한다.

      # Default nginx.conf에서의 Main Context
      user  nginx;
      worker_processes  auto;
      ... 
      error_log  logs/error.log;
      error_log  logs/error.log  notice;
      error_log  logs/error.log  info;
      ... 
      pid        logs/nginx.pid;
  • Events Context

    • 각 Worker 프로세스 마다 할당된 connection 수를 정의.

      ...
      events {
      worker_connections  1024;
      }
      ...
  • HTTP Context

    • NGINX가 HTTP/HTPS 연결을 어떻게 관리할 지에 대한 설정을 정의

      • ex) Backend Server 및 Application Pool
    • 여기서 설정한 사항들은 그 하위에 있는 Server, Upstream, Location context 등으로 상속된다.

    • Server Context

      • Virtual Server(Virtual Host)를 정의 : Domain name, IP Address, Unix Socket 등
      • Location Context
        • Virtual Server가 수신한 http request에 대해 특정 URI에 기반해서 처리할 수 있게 정의.
    • Upstream Context

      • Load Balance 목적으로 Backend Server 연결 시에 정의

        http {
        include       mime.types;
        default_type  application/octet-stream;
        ...
        access_log  logs/host.access.log  main;
        .
        .
        .
        upstream backend {
        server 192.168.100.101 weight =3;
        server 192.168.100.102;
        server 192.168.100.103;
        }
        .
        .
        .
        server {
        listen 80;
        server_name www.browndwarf.com;
        .
        charset UTF-8;
        .
        location / {
        root   html;
        index  index.html index.htm;
        }
        ...
        location /api/ {
        proxy_pass http://backend/api;
        }
        ...
        }
        ...
  • Stream Context

    • Layer3/4 에서 TCP/UDP Traffic 설정을 정의

4. 명령어(Directives)와 Block

  • Directive : NGINX 행동을 설정하는 문구. ex) listen, server_name
  • Block : 중괄호 { } 로 묶은 Directives의 집합.
  • 중요 Directives
    • worker_processes : 실제 요청을 처리하는 Thread.
    • worker_connections : 허용 connection 수.
      • 최대 접속자 수 : worker_processes * worker_connections
      • Reverse Proxy 사용시 : (최대접속자 수 / 4) < (ulimit -n의 결과값 ; open files)
    • log_format : log 형식 지정
    • access_log : access log file 위치
    • include : 다른 설정 파일들 중에 포함시킬 파일을 지정.
      • *.conf 와 같이 복수의 설정파일을 포함시킬 경우 알파벳 순서로 설정 파일이 적용됨.