Nginx란 무엇인가?
Nginx(엔진엑스)는 가볍고, 빠르며, 동시에 수많은 연결을 처리하기 위해 설계된 오픈 소스 웹 서버 소프트웨어입니다.
과거의 웹 서버(Apache 등)는 요청 하나당 프로세스나 스레드를 생성하는 방식이라 접속자가 많아지면 서버가 급격히 느려지는 한계가 있었습니다. Nginx는 이를 해결하기 위해 이벤트 기반(Event-Driven) 구조로 설계되어, 적은 자원으로도 폭발적인 트래픽을 안정적으로 처리할 수 있는 것이 특징입니다.
Nginx의 4가지 핵심 역할
1. 웹 서버 (Web Server)
가장 기본적인 역할로, 클라이언트(브라우저)로부터 HTTP 요청을 받아 서버에 저장된 정적 파일(HTML, CSS, JS, 이미지 등)을 전달합니다. 매우 빠르고 가볍기 때문에 정적 컨텐츠 서빙에 탁월합니다.
2. 리버스 프록시 (Reverse Proxy)
클라이언트와 백엔드 서버(Node.js, Spring, Python 등) 사이에서 중개자 역할을 합니다.
- 보안: 백엔드 서버의 IP를 외부에 노출하지 않아 직접적인 공격을 방지합니다.
- 유연성: 백엔드 서버의 구성을 변경해도 클라이언트는 Nginx 주소만 보면 되므로 관리가 쉽습니다.
3. 로드 밸런서 (Load Balancer)
한 대의 서버에 트래픽이 몰리지 않도록 여러 대의 서버로 부하를 분산해주는 역할입니다.
- 앞서 설명한 upstream 설정을 통해 여러 서버에 요청을 골고루 나누어 줌으로써 서비스의 중단 없는 운영(고가용성)을 가능하게 합니다.
4. SSL 터미네이션 (SSL Termination)
클라이언트와의 HTTPS 암호화 통신을 Nginx가 직접 처리합니다.
- 백엔드 서버는 복잡한 암호화 계산을 할 필요 없이 비즈니스 로직에만 집중할 수 있게 하여 전체적인 시스템의 효율을 높여줍니다.
왜 Nginx를 써야 할까?
- 비용 절감: 적은 메모리와 CPU 점유율로 더 많은 접속자를 처리합니다.
- 안정성: 트래픽이 몰려도 서버가 쉽게 죽지 않습니다.
- 다재다능: 웹 서버, 프록시, 로드 밸런서 기능을 하나로 해결할 수 있습니다.
nginx의 구성요소 및 설정 살펴보기
계층적 블록 구조
Nginx는 Main > HTTP > Server > Location 순으로 설정이 세분화됩니다. 상위 블록의 설정은 하위로 상속되지만, 하위 블록에서 다시 정의하면 덮어쓰기가 가능합니다.
① main.
메인은 gninx서비스의 기본 뼈대와 권한을 결정합니다.
- 보안: 어떤 사용자 계정(user)으로 Nginx를 돌릴 것인가?
- 성능: 몇 개의 작업 프로세스(worker_processes)를 띄울 것인가?
- 로그: 서버 전체에 발생하는 치명적인 에러(error_log)를 어디에 기록할 것인가?
- 식별: 시스템 내에서 Nginx의 번호(pid)를 어디에 저장할 것인가?
② http
웹 서버로 들어오는 모든 트래픽에 공통적으로 적용되는 설정을 담습니다.
연결 유지 시간(Keepalive), 로그 형식, MIME 타입 정의 등 모든 웹 사이트에 공통으로 쓰이는 정책을 정의합니다.
- include: 외부 설정 파일(mime.types 등)을 가져옵니다.
- access_log / error_log: 전체 접속 및 에러 로그 경로를 지정합니다.
- keepalive_timeout: 클라이언트와의 연결을 얼마나 유지할지 결정합니다.
- gzip: 데이터 전송 시 압축 사용 여부를 설정합니다.
③ Server
하나의 Nginx 안에서 여러 개의 웹사이트를 운영할 때 사용합니다. (가상 호스트 설정)
"어떤 도메인(server_name)으로 들어온 요청을 처리할 것인가?"를 결정합니다.:
- listen: 어떤 포트(80, 443 등)에서 요청을 기다릴지 지정합니다.
- server_name: 서비스할 도메인 주소(예: blog.naver.com)를 적습니다.
- ssl_certificate: 해당 도메인에 적용할 보안 인증서 경로를 설정합니다.
④ Location
서버 내부에서 상세 주소(URI)에 따라 다른 동작을 하도록 만듭니다.
"도메인 뒤에 붙는 주소(blog.com/api 등)에 따라 파일을 줄 것인가, 다른 서버로 보낼 것인가?"를 정합니다.
- root: 요청된 파일을 찾을 실제 서버의 디렉토리 경로입니다.
- proxy_pass: 요청을 다른 백엔드 서버(Node.js 등)로 넘겨줍니다.
- try_files: 파일이 없을 때 보여줄 기본 페이지(index.html 등)를 지정합니다.
- rewrite: 주소를 강제로 다른 형태로 바꿉니다 (예: HTTP -> HTTPS).
'Linux' 카테고리의 다른 글
| [실습 포함] 리눅스 계정 관리 필수 명령어 10가지: 초보자를 위한 useradd, passwd등 완벽 가이드 (0) | 2025.11.18 |
|---|
