NGINX Configuration file

개발새발·2022년 11월 29일
1

42Cursus

목록 보기
28/29
post-thumbnail
post-custom-banner

NGINX Configuration file

1. nginx.conf 구조

NGINX의 기본 설정 파일은 nginx.conf이며 파일의 구성은 directive들로 이루어져 있다.

Directive에는 두 가지 종류가 있는데, 이름과 인자가 공백으로 구분되고 ;으로 끝나는 단일 줄은 simple directive, 구조는 같지만 { }로 둘러쌓인 것은 block directive이다. block directive{ } 안에 또 다른 directive가 들어간 경우는 context라고 한다. 어떤 context에도 속하지 않고, 바깥에 나와있는 directive들은 main context에 속해있는 것으로 간주한다.

1-1. simple directive

user    nginx;
worker_processes    1;
error_log    /var/log/nginx/error.log warn;
pid    /var/run/nginx.pid;
  • user : Linux 시스템에서 NGINX 서버를 동작시킬 사용자
  • worker_processes : 사용할 thread 개수 (CPU 코어 수에 맞추는 것 권장)
  • error_log : error log를 기록할 파일의 위치
  • pid : NGINX pid가 적혀있는 파일의 위치

1-2. block directive

events {
  worker_connections	1024;
}

http {
  include	/etc/nginx/mime.types;
  include	/etc/nginx/conf.d/*.conf;
  default_type	application/octet-stream;
  log_format	main    ...
  access_log	/var/log/nginx/access.log    main;
  sendfile		on;
  #tcp_nopush	on;
  keepalive_timeout		65;
  #gzip		on;
  
  server {
    # configuration of HTTP virtual server 1
    location /one {
      # configuration for processing URIs starting with '/one'
    }
    location /two {
      # configuration for processing URIs starting with '/two'
    }
  } 
    
  server {
    # configuration of HTTP virtual server 2
  }
  ...
}
  • events : 일반적인 connection process를 담당
    • worker_connections : 하나의 worker_process당 처리할 connection 수
  • http : HTTP 웹 트래픽 처리 전반에 대해 기술하므로 universal directive 라고도 부름
    • include : 외부 config 파일 참고 (config 파일들을 쉽게 관리하기 위해 기능들 단위로 파일을 나눠서 저장하고 include를 통해 참고하는 것 권장)
    • access_log : NGINX 웹 서버로 접속한 내역들을 정의할 파일 위치
    • server : 특정 도메인이나 IP 주소로의 요청 처리
      • 하나의 웹 사이트를 선언하는데 사용
      • 하나의 서버로 두 개를 동시에 운영하고 싶을 때 사용 (가상 호스팅)
    • location : 특정 url을 처리하는 방법 정의

 

2. Web server로 NGINX 사용하기

2-1. 가상 서버 세팅

nginx.conf에는 적어도 하나의 server directive가 있어야 한다. NGINX가 요청을 처리할 때, 가장 먼저 요청을 처리할 virtual server를 선택한다. 하나의 http context 안에는 여러 개의 server directive가 있을 수 있다. 보통 server configuration block에는 요청을 listen할 특정 IP 주소와 포트, 혹은 Unix domain socket과 path를 명시한다.

아래 예시는 IP 주소 127.0.0.1 과 포트 8080으로 listen하는 configuration이다.

server {
  listen 127.0.0.1:8080;
  # The rest of server configuration
}

또는 server_name directive를 사용하여 도메인 명을 사용할 수도 있다. 이 때 NGINX는 요청의 Host header의 필드값과 server_name을 비교하여 맞는 server를 찾는다. server_name으로는 wild card와 정규 표현식 등을 사용할 수 있다.

server {
  listen      80;
  server_name example.org www.example.org;
  ...
}

2-2. Location 세팅

NGINX는 요청 URI에 따라 다른 서버로 트래픽을 전송한다. 이는 server block 안의 location directive를 이용해 정할 수 있다. 여러 location block을 사용할 수도 있고, location 안에 다른 location directive를 설정할 수도 있다.

location은 URI 경로의 일부인 prefix string이거나 정규 표현식이 될 수 있다. 다음 예시는 /some/path/document.html 과 같은 경로의 요청을 처리한다.

location /some/path/ {
  ...
}

location context 안에 있는 directive는 요청을 어떻게 처리할지 정할 수 있다. static file을 보여주거나 proxy server로 요청을 전송한다. 다음 예시의 첫 번째 location context와 일치하는 패턴은 /data 디렉토리에서 파일들을 보여준다. 두 번째 location context와 일치하는 패턴은 www.example.com 도메인으로 요청을 전송한다.

server {
  location /images/ {
    root /data;
  }

  location / {
    proxy_pass http://www.example.com;
  }
}
  • root : static file이 있는 파일 시스템의 경로이다. 이때 root 뒤에 location의 경로가 추가된 상태로 파일의 경로를 찾는다. 예를 들어 /images/example.png의 요청이 들어오면 NGINX는 /data/images/example.png에서 파일을 찾는다.
  • proxy_pass : 위의 예시에서 /images/와 맞지 않는 모든 패턴의 요청은 프록시 서버로 전송된다. 이후 프록시 서버에서의 응답이 클라이언트에게 전송된다.

 

Reference

profile
블록체인 개발 어때요
post-custom-banner

0개의 댓글