Nginx란? 기본 설정 파일 및 사용 방법

Nginx란? 기본 설정 파일 및 사용 방법

1. Nginx 란?

Nginx는 가벼운 고성능의 웹서버로서 높은 트래픽 처리를 위해 만들어졌습니다.
예를들어 Apache의 경우는 접속마다 Process 또는 Thread를 생성하는 구조로, 1만명이 동시접속을 하면 그 만큼 Process or Thread 생성비용이 들 것이고 대용량 요청을 처리할 수 있는 웹서버로서의 한계를 드러냅니다.
하지만 Nginx는 한 개 또는 고정된 프로세스만 생성 하고, 그 프로세스 내부에서 비동기 방식으로 효율적으로 작업을 처리합니다.
따라서 동시 접속 요청이 많아도 Process 또는 Thread 생성 비용이 존재하지 않아서 높은 트래픽 처리에 유리한 웹서버입니다.


2. Nginx 기본 설정 파일 위치

  • 기본 설정 파일 명 : nginx.conf
  • 기본 설정 파일 위치
    • ubuntu APT 패키지를 통해서 설치했다면, /etc/nginx 디렉토리에 위치
    • 컴파일로 설치 했다면, /usr/local/nginx 디렉토리에 위치
    • 기본 설정파일이 어디에 위치하는지 모르겠다면, find / -name nginx.conf

3. nginx.conf 파일 설정 방법 및 사용방법

# 3-1. core 모듈 설정
user  nginx nginx;
worker_processes  1;

events {
          # 3-2. events 블록 
          worker_connections 512;
}

http {
            # 3-3. http 블록 
            include /etc/nginx/mime.types;
            default_type application/octet-stream;
            keepalive_timeout                60;
            log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                                            '$status $body_bytes_sent "$http_referer" '
                                            '"$http_user_agent" "$http_x_forwarded_for"';
            access_log /var/log/nginx/access.log main;

            server {
                       # 3-4. server 블록 
                       . . .
                            location {
                                           # 3-5. location 블록 
                                           . . .
                            }
            }

            include /etc/nginx/conf.d/*.conf;

}

3-1. Core 모듈 설정

설정 파일 최상단에 위치하며 nginx의 프로세스 관리, 보안과 같은 기본적인 동작 방식을 정의합니다.
core 모듈의 다양한 지시어는 http://nginx.org/en/docs/ngx_core_module.html 에서 확인할 수 있습니다.

  • user

작업자 프로세스가 어떤 user, group으로 실행되는지에 대한 설정입니다. user root root; 로 할 경우 작업자 프로세스가 파일 시스템의 모든 권한을 사용하게 되므로 보안상 위험합니다.
별도의 사용자 계정(ex : user nginx nginx;)를 만드는 것이 좋습니다.
아래의 Syntax 예시에서 [group]을 생략할 수 있으며, 생략하면 user가 대신 사용됩니다.

Syntax:    user user [group];
Default:  user nobody nobody;
  • worker_process

작업자 프로세스(worker process)의 수를 정의합니다. (Nginx는 하나의 master process와 여러개의 worker process로 구성되어 실행됩니다. master process는 설정파일을 읽고, worker process를 유지 및 관리합니다. 모든 요청은 worker process에서 처리합니다. master process에서는 어떤 클라이언트 요청도 처리하지 않습니다.)

보통 CPU 코어 수 만큼 할당하는 것이 좋으며, 확실하지 않은 경우 auto 를 입력하여 자동 감지를 시도할 수 있습니다.

Syntax:    worker_processes number | auto;
Default:  worker_processes 1;

참고 : CentOS 에서는 cat /proc/cpuinfo | grep processor 로 cpu core 수를 확인할 수 있습니다.


3-2. events 블록

이벤트 블록은 네트워크의 동작방법과 관련된 설정값을 가집니다.

  • worker_connections

한개의 작업자 프로세스(worker process)가 동시에 처리할 수 있는 커넥션의 수를 말합니다.
작업자 프로세스(worker process)가 4개라면, worker_process(4) X worker_connections(512) = 2048 로 총 2048개 커넥션이 최대 동시에 처리할 수 있습니다.
이 숫자에는 클라이언트와의 연결 뿐만 아니라 프록시 서버와의 연결 등도 포함된다는 점에 유의해야 합니다.

Syntax:    worker_connections number;
Default:  worker_connections 512;

3-3. http 블록

http 블록은 server, location 의 루트 블록입니다. http 블록에서 설정된 내용은 server의 기본값이 되고, server의 지시어는 location의 기본값이 됩니다.
http블록 안에 한 개 이상의 server 블록을 선언할 수 있으며, server 블록 안에서 한 개 이상의 location 블럭을 삽입할 수 있습니다.
그리고 하위의 블록에서 선언된 지시어는 상위의 선언을 무시하고 적용됩니다.
http 블록은 여러개를 사용할 수 있지만 관리상의 이슈로 한번만 사용하는 것을 권장됩니다.
http 관련된 지시어는 http://nginx.org/en/docs/http/ngx_http_core_module.html 에서 확인할 수 있습니다.

  • include

http 블록에서 include 지시어를 사용할 수 있으며, include는 특정 파일을 포함하는 기능을 수행합니다. include 지시어가 있는 위치에 해당 파일 내용이 삽입됩니다.
include 된 파일 안에서 또 다른 파일을 include할 수 있으며, 순차적으로 처리됩니다.

  • default_type

이 웹서버의 기본 Content-Type을 설정합니다. octet-stream은 바이너리 형태의 타입을 의미합니다. 일반적으로 nginx에서 해석할 수 없는 타입이라면 요청을 기본 타입으로 요청을 받도록 설정됩니다.

  • keepalive_timeout

클라이언트 접속 유지 시간으로 몇 초 후에 클라이언트 접속을 끊을지 결정합니다.

  • log_format

로그 포맷을 설정합니다. $로 시작하는 것은 변수고 변수와 관련된 내용은 http://nginx.org/en/docs/varindex.html 확인할 수 있습니다.

  • access_log

access 로그를 저장할 파일을 지정합니다.

access_log logs/access.log [context];
# access_log logs/access.log main;

3-4. server 블록

한 서버(한 개의 ip)에서 각각의 도메인에 따라서 서로 다른 페이지를 서비스할 수 있습니다.
예를들어, 서로 다른 도메인 (minimilab-zzang.com과 minimilab.com) 을 한 서버에서 서로 다른 페이지를 서비스 하도록 할 수 있습니다.
minimilab-zzang.com 도메인으로 요청이 들어오면 /var/www/minimilab-zzang.com 위치의 페이지를 서비스 하도록 하며,
minimilab.com 도메인으로 요청이 들어오면 /var/www/minimilab.com 위치에서 페이지를 서비스 합니다.

server {
    server_name  minimilab-zzang.com;
    root /var/www/minimilab-zzang.com
}

server {
    server_name  minimilab.com
    root /var/www/minimilab.com
}

include는 지시어는 server 블록 내에서도 사용할 수 있습니다.
server 블록은 여러개 사용이 가능하며, 와일드카드(*) 와 정규식 사용이 가능합니다.
server 블록을 여러개 사용할 경우 다음과 같은 우선순위에 따라서 선택됩니다.

  1. 정확한 이름
  2. 별표로 시작하는 가장 긴 와일드카드 이름(예: *.example.org)
  3. 별표로 끝나는 가장 긴 와일드카드 이름(예: example.*)
  4. 첫 번째 일치하는 정규식(구성 파일에 나타나는 순서대로)
     server {
         listen       80;
         server_name  example.org  www.example.org;
         ...
     }
    
     server {
         listen       80;
         server_name  *.example.org;
         ...
     }
    
     server {
         listen       80;
         server_name  mail.*;
         ...
     }
    
     server {
         listen       80;
         server_name  ~^(?<user>.+)\.example\.net$;
         ...
     }
  5. 정규식을 사용하려면 server_name이 ~ 로 시작해야 합니다.

server_name 관련 내용은 https://nginx.org/en/docs/http/server_names.html 에서 확인할 수 있습니다.

참고 : https://deeplify.dev/server/web/nginx-configuration


3-5. location 블록

location 블록은 server 블록 안에서 사용하며, 여러개를 사용할 수 있습니다.
location 블록에도 정규식으로 사용할 수 있으며 ~ 문자가 올 경우 정규식을 사용하며, 대소문자를 구분합니다. 대소문자 구분없이 사용하려면 ~* 를 사용합니다.

http://minimilab.com 으로 요청이 들어오면, nginx 가 기본적으로 설치된 /etc/nginx/ 위치에 더해 root 설정인 html 과 index 설정을 더해 /etc/nginx/html/inex.html 의 내용을 보여줍니다.
http://minimilab.com/something/test/ 로 요청이 들어오면, root에 설정되어 있는 /home/test 의 내용을 보여줍니다.

server {
        listen 80;
        server_name  minimilab.com

        location / {
            root html;
            index index.html index.htm;
        }

        location ~* ^/(.*)/test/ {
            root /home/test;
        }
}

참고 : https://architectophile.tistory.com/12

댓글

Designed by JB FACTORY