[Nginx 핵심 가이드] 설치부터 설정 파일 구조까지
Nginx는 웹 서버를 구축하거나 정적·동적 콘텐츠를 배포할 때, 가장 널리 사용되는 웹 서버(Web Server) 중 하나입니다.
이번 포스팅에서는 처음 접하는 분들도 이해하기 쉽도록, Nginx의 개념부터 설치 및 실행 방법, 그리고 설정 파일의 구조와 주요 블록별 역할까지 단계별로 정리해보았습니다.
이 포스팅은
Ubuntu 24.04 LTS
기준으로 작성되었습니다.
1. Nginx 란?
Nginx는 가볍고 뛰어난 성능을 자랑하는 오픈소스 웹 서버 입니다.
이벤트 기반 비동기 아키텍처를 사용하여, 수많은 동시 접속을 효율적으로 처리할 수 있는 것이 가장 큰 강점입니다.
Nginx의 주요 용도는 다음과 같습니다.
- 정적 콘텐츠 제공 (HTML, CSS, JS 등)
- 리버스 프록시 (클라이언트와 서버 간의 중계)
- 로드 밸런싱 (트래픽 분산)
- HTTP 캐싱 (응답 속도 향상 및 트래픽 감소)
이처럼 Nginx는 다양한 용도, 뛰어난 성능과 낮은 리소스 사용량, 그리고 높은 안정성 덕분에 전 세계 수많은 웹사이트와 서비스에서 널리 활용되고 있습니다.
2. Nginx 설치 및 실행
먼저 Nginx 설치 및 실행부터 차근차근 진행해보도록 하겠습니다.
Nginx는 Ubuntu 공식 패키지 저장소를 통해 손쉽게 설치할 수 있습니다.
2-1. 패키지 목록 업데이트 및 설치
패키지 목록을 최신 상태로 업데이트한 뒤, Nginx를 설치합니다.
1
2
sudo apt update
sudo apt install nginx
Nginx 버전 확인 방법
터미널에nginx -version
명령어를 입력하여 손쉽게 확인이 가능합니다.
2-2. 서비스 시작 및 부팅 시 자동 실행 설정
패키지 설치가 완료되면 Nginx 서비스를 시작하고, 서버가 재부팅될 때 자동으로 실행되도록 설정합니다.
1
2
sudo systemctl start nginx
sudo systemctl enable nginx
2-3. 서비스 상태 확인
아래 명령어를 통해 Nginx 서비스가 정상적으로 실행 중인지 확인합니다.
1
sudo systemctl status nginx
위와 같이 nginx.service
의 상태가 enabled
이고, Active
상태가 active (running)
으로 표시되면 성공입니다.
이후 웹 브라우저에서 서버의 IP 주소 또는 도메인으로 접속했을 때, 위와 같은 Nginx 기본 페이지가 나타난다면 정상적으로 설치 및 실행된 것입니다.
3. Nginx 설정 구성과 구조 이해
Nginx는 /etc/nginx/
디렉토리에 다양한 설정 파일 및 디렉토리를 보유하고 있습니다.
효율적인 웹 서버 운영을 위해, 각 설정 파일과 디렉토리의 역할을 이해하는 것이 중요합니다.
3-1. 주요 설정 파일 및 디렉토리 구조
경로(Path) | 설명 |
---|---|
/etc/nginx/nginx.conf | Nginx 전역 설정 파일로, 전체 서버 동작 방식을 정의합니다. |
/etc/nginx/sites-available/ | 개별 사이트(서버 블록)의 설정 파일을 저장하는 디렉토리 입니다. 도메인이나 서비스별로 설정 파일을 만들어 효율적으로 관리할 수 있습니다. |
/etc/nginx/sites-enabled/ | 실제로 활성화되어 적용되는 사이트(서버 블록) 설정의 심볼릭 링크가 위치하는 디렉토리 입니다. 일반적으로 sites-available 에 있는 설정 파일을 연결하여 사용합니다. |
/etc/nginx/conf.d/ | 추가 설정 파일을 저장하는 디렉토리 입니다. 이곳에 .conf 확장자 파일을 두면, Nginx가 자동으로 불러와 설정을 적용합니다. |
/var/www/ | 웹 서버의 기본 루트 디렉토리입니다. 웹사이트의 실제 파일(HTML, CSS 등)이 이곳에 위치합니다. |
/var/log/nginx/ | Nginx 로그 파일이 저장되는 디렉토리입니다. access.log 와 error.log 를 통해 접속 기록 및 오류 정보를 확인할 수 있습니다. |
3-2. 설정 파일의 주요 블록 및 지시어
Nginx 설정 파일은 블록 단위의 계층 구조로 이루어져 있으며, 각 블록 안에는 서버 동작 방식을 정의하는 다양한 지시어(directive)들이 포함됩니다.
설정 파일은 일반적으로 다음과 같은 계층으로 나뉩니다.
1
2
3
4
5
main block
├── events block
└── http block
├── server block
│ └── location block
3-2-1. main block
설정 파일 최상단에 위치하는 블록으로, Nginx 프로세스의 전반적인 동작을 제어하는 전역 설정 영역입니다.
다음은 main block의 주요 지시어 입니다.
지시어 | 설명 |
---|---|
include | 외부 설정 파일을 불러올 때 사용합니다. 이는 main block 뿐만 아니라, 다른 블록(http, server 등) 안에서도 사용할 수 있습니다. |
user | Nginx 프로세스를 실행할 리눅스 사용자 및 그룹을 지정합니다. 일반적으로 www-data 사용자로 설정합니다. |
worker_processes | 동시에 처리할 워커 프로세스 수를 지정합니다. auto 로 설정하면 CPU 코어 수에 맞춰 자동으로 할당됩니다. |
error_log | 전역 오류 로그 파일의 경로와 로그 레벨을 지정합니다. 로그 레벨은 debug , info , notice , warn , error , crit 등 다양한 수준이 있습니다. |
pid | 마스터 프로세스의 PID를 저장할 파일 경로를 지정합니다. |
3-2-2. events block
Nginx의 이벤트 기반 네트워크 처리 방식과 연결 수 제한 등을 설정하는 블록입니다.
다음은 events block의 주요 지시어 입니다.
지시어 | 설명 |
---|---|
worker_connections | 각 워커 프로세스가 동시에 처리할 수 있는 최대 연결 수를 지정합니다. |
multi_accept | 워커 프로세스가 새로운 연결을 수신할 때, 한 번에 여러 연결을 동시에 수락할지 여부를 설정합니다. |
3-2-3. http block
Nginx에서 실제 HTTP 요청을 처리하는 핵심 블록입니다.
다음은 http block의 주요 지시어 입니다.
지시어 | 설명 |
---|---|
default_type | 웹 서버의 기본 MIME 타입(Content-Type)을 정의합니다. 파일 확장자를 알 수 없을 때 적용되며, 일반적으로 application/octet-stream 으로 설정합니다. |
sendfile | 정적 파일 전송 시 sendfile() 시스템 콜(System Call)을 사용할지 여부를 설정합니다. 커널 공간에서 바로 네트워크로 파일을 전송하여, 파일 처리 성능을 향상시키는데 도움을 줍니다. 일반적으로 on 으로 설정합니다. |
gzip | 응답 데이터를 gzip 으로 압축할지 여부를 설정합니다. 압축된 데이터는 네트워크 트래픽을 줄이고, 페이지 로딩 속도를 향상시키는 데 도움이 됩니다. |
access_log | 접속 로그를 저장할 파일 경로와 형식을 지정합니다. |
3-2-4. server block
Nginx에서 하나의 도메인 또는 포트에 대한 서버 설정을 정의하는 블록으로, http block 안에 위치합니다.
가상 호스트의 개념으로, 여러 도메인을 하나의 Nginx 인스턴스에서 독립적으로 처리할 수 있도록 합니다.
다음은 server block의 주요 지시어 입니다.
지시어 | 설명 |
---|---|
server_name | 서버 블록이 처리할 도메인 이름을 지정합니다. |
listen | 서버가 바인딩할 포트와 IP 주소를 설정합니다. |
root | 요청에 응답할 정적 파일의 루트 디렉터리 경로를 지정합니다. |
index | 디렉터리 요청 시 기본으로 제공할 파일명을 지정합니다. |
3-2-5. location block
클라이언트의 요청 URL 경로에 따라 처리 방식을 분기하는 블록으로, server block 안에 위치합니다.
요청 경로에 따라 정적 파일 제공, 리버스 프록시, 리다이렉트, 접근 제한 등 다양한 처리가 가능합니다.
다음은 location block의 주요 지시어 및 패턴 입니다.
지시어 | 설명 |
---|---|
try_files | 요청한 파일이 존재할 경우 제공하고, 없으면 대체 경로 또는 오류를 반환합니다. |
proxy_pass | 요청을 다른 서버로 전달할 때 사용합니다. 주로 리버스 프록시 설정에 사용됩니다. |
패턴(Pattern) | 설명 |
---|---|
location / | 루트 경로에 대한 요청을 처리합니다. 모든 요청의 기본 진입점이 됩니다. |
location /path/ | 특정 경로로 시작하는 모든 요청을 처리합니다. 본 예시의 경우, /path/ 로 시작하는 모든 요청에 대해 적용됩니다. |
location = /about | 정확히 해당 경로와 일치하는 요청을 처리합니다. 본 예시의 경우, /about 과 정확히 일치하는 요청에만 적용됩니다. |
location ~ \.js$ | 정규표현식을 사용하는 패턴 매칭입니다. 본 예시의 경우, .js 로 끝나는 모든 요청에 적용됩니다. |
마무리
지금까지 Nginx의 개념부터 설치 및 실행 방법, 그리고 설정 파일의 구조와 블록별 주요 역할까지 살펴보았습니다.
Nginx는 처음에는 다소 생소하게 느껴질 수 있지만, 구조만 제대로 이해하면 매우 유연하고 강력한 웹 서버를 구성하는데 도움이됩니다.
궁금한 점이나 오류가 있다면 댓글로 남겨주세요!
감사합니다.