본문 바로가기
🛠 Infrastructure/-- nginx

[Nginx] Nginx의 핵심 파일 nginx.conf 파일은 어떻게 구성될까? 분석해보자!

by Wonit 2020. 11. 29.

지난 시간 우리는 EC2 인스턴스에 nginx를 올려 간단히 호스팅해보기를 통해 Nginx 패키지를 설치하고 실행시켜보았다.

 

하지만 그 과정에서 만난 nginx.conf 파일과 nginx 디렉토리에 대해서 간단하게 설명만 했는데, 오늘은 더 깊게 알아보도록 하자.

Nginx 디렉토리 구조

우리는 nginx 패키지가 설치된 디렉토리로 가야한다.

 

그러기 위해서 기본 설정 파일이 있는 경로를 찾아야한다.

 

만약 당신이 위에서 했던 것 처럼 바이너리 파일을 yum이나 wget, apt-get으로 다운받았다면 운영체제의 계열별로 다른 위치에 존재할 수 도 있다.


하지면 리눅스 명령어로 이 파일들의 위치를 쉽게 찾을 수 있다.

> $ sudo find / -name nginx.conf

그리고 nginx.conf 파일이 있는 디렉토리에서 어떤 파일과 디렉토리가 있는지 확인해보자.

 

리눅스에서 디렉토리 구조를 트리형태로 나타내기 위해서는 tree 패키지를 인스톨해야한다.

> $ sudo yum install tree
> /etc/nginx$ sudo tree

명령어로 확인해보자.

그럼 위와 같이 출력되는데, 각각의 파일과 디렉토리는 다음과 같은 역할을 한다.

 

  1. nginx.conf : 메인 설정 파일
  2. fcgi.conf : Fast CGI 환경설정 파일

이제 nginx.conf 파일을 좀 더 깊게 알아보자.

nginx.conf 파일에 대해서

우선 nginx.conf 파일이 뭔지 궁금하니 리눅스의 cat명령어로 nginx.conf 파일을 열어보자.

> $ sudo cat nginx.conf

그럼 다음과 같이 나온다.

뭔가 외계어가 나왔다.

 

겁먹지 말고 개념부터 알아보자.

nginx.conf 파일의 구성과 디렉티브

nginx.conf 파일의 구성은 디렉티브로 이루어져 있다.

 

이런 디렉티브들은 블록과 컨텐츠로 구성되어 있는데 Directive = Block + Countext과 같이 구성된다.

디렉티브를 끝내는 방법

  • 세미콜론
  • 중괄호 블록

nginx.conf 에서 주석

  • #

그럼 이제 nginx.conf 파일을 나눌 수 있는 능력이 생겼다.

 

디렉티브들로 나눠보자.

nginx.conf에서 최초의 디렉티브와 블록

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
       . . .
}

http {
       . . .
}

이는 nginx.conf 파일에 있는 디렉티브와 블록이다.

 

nginx.conf에서 최초의 디렉티브와 블록을 나누면 다음과 같다.

디렉티브

최초 디렉티브는 다음과 같이 구서된다.

  • user
  • worker_processes
  • error_log
  • pid

얘들은 어떤 특정 블록이나 컨텍스트에 포함되지 않는 메인 컨텍스트라고 부른다.


user이게 root로 지정되어있으면 워커 프로세서가 root로 동작하게 하고 사용자가 워커 프로세스를 악의적으로 사용할 수 있어서 보안상 위험하다.

worker_process

워커 프로세스를 몇 개를 생성할 것인지 지정한다.

worker_connections

이벤트 안에서 사용하는 지시어인데 동시에 접속을 얼마나 처리할 것인지 지정하는 값으로 worker_process가 4고 worker_connections가 1024면 4 * 1024로 4096의 커넥션을 처리할 수 있다.

블록

메인 컨텍스트와 별개로 추가적인 디렉티브로는 아래와 같은 블록이 있따.

  • events {}
  • http {}

Http 블록

http 블록은 웹 트래픽을 처리하는 디렉티프블을 담고 있으면서 Universal블록이라고도 하더라.


그리고 http 블록에서 사용되는 모든 디렉티브들은 nginx 문서에서 볼 수 있다.

Server 블록

하나의 웹 사이트를 선언하는데 사용되고, 가상 호스팅의 개념이고 하나의 서버로 두 개를 동시에 운영하고 싶을 때 사용한다.

location 블록

server 블록 안에서 나오면서 특정 url을 처리하는 방법을 정의한다.

예를 들어서 http://localhost:80/loginhttp://localhost:80/join으로 접근을 다르게 하고싶을 때 사용되는데 이는 로드밸런싱에서도 나오니 주의깊게 봐두자.

events 블록

주로 네트워크의 동작 방법과 관련된 설정값들을 갖는다.

 

 

댓글0