본문 바로가기
Infra

[Nginx] Nginx의 핵심 파일인 nginx.conf에 관해 알아보자

by 진꿈청 2024. 3. 16.

지난 포스팅에서 우리는 Nginx가 뭔지 알아보았고 왜 Nginx를 쓰는지에 관해 알아보았다.

 

이번 포스팅에서는 Nginx의 실제 사용에 대해 알아본다.

 

필자는 AWS EC2에서 수행했다.

Nginx의 디렉토리 구조

우선, 제목에도 알 수 있듯이 Nginx의 핵심 파일은 nginx.conf이다. 이건 어디에 있을까?

 

 

find 명령어를 사용해서 /(루트 디렉토리) 부터 nginx.conf가 어딨는지 확인할 수 있다.

 

 

/etc/nginx 디렉토리의 내부 구성은 다음과 같다.

 

1. nginx.conf: 메인 설정 파일

2. fcgi.conf: Fast CGI 환경설정 파일

 

Nginx는 알겠는데 Fast CGI는 뭘까?

 

FastCGI

CGI(Common Gateway Inteface)의 한 형태로, 웹 서버와 애플리케이션 서버 간의 상호작용을 위한 통신 프로토콜이다.

기존 CGI는 클라이언트의 요청마다 새로운 프로세스를 생성하는데 FastCGI는 애플리케이션을 지속적으로 실행하는 데몬으로 관리한다.

또한, 요청이 있을 때마다 이미 실행중인 프로세스를 재사용한다.

 

이는 초기화 비용이 절감되게 해주며 처리 속도가 향상된다.

 

FastCGI에 관해 간단히 알아봤다.

 

 

 

이제는 본격적으로 nginx.conf 파일에 대해 좀 더 알아보자.

 

nginx.conf 파일에 관해서

 

대충 처음보는 구조이다.

 

우선 개념부터 알아보자.

 

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

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

 

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

 

 

디렉티브를 끝내는 방법

 

일반 언어와 비슷하다.

  • 세미콜론
  • 중괄호 블록

 

nginx.conf에서의 주석 처리는?

  • 파이썬과 Bash 처럼 #으로 주석처리할 수 있다.

이제 기본 nginx.conf 파일의 나눌 수 있게 되었다.

 

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

user www-data;
worker_processes auto;

error_log /var/log/nginx/error.log warn;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
	worker_connections 768;
	# multi_accept on;
}

http {
	. . .
}

 

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

  • user
  • worker_processes
  • error_log
  • pid

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

 

각각에 대해 알아보자.

 

user

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 블록

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