Nginx 란?
Nginx는 트래픽이 많은 웹사이트에서 서버(WAS)의 부담을 줄이기 위해 사용되는, 비동기 이벤트 기반 구조의 경량 웹 서버이다.
클라이언트로부터 요청을 받았을 때, 정적 파일(html, css, js 등)을 직접 응답하는 HTTP 웹 서버로 활용될 수 있으며,
또한 리버스 프록시(Reverse Proxy)로서 백엔드 서버(WAS) 앞단에서 요청을 분산 처리하는 로드밸런서역할도 수행할 수 있다.
Nginx가 등장하기 전까지는 대부분의 회사에서 Apache 웹 서버를 주로 사용했지만 최근에는 Nginx의 사용량이 Apache를 넘어섰고,실제로 2025년 1월 기준 전 세계 웹 서버 점유율 1위를 차지하고 있다. Nginx를 더 많이 사용하는 이유는 Apache에 비해 훨씬 더 많은 트래픽을 처리할 수 있기 때문이다.
Nginx를 공부하게 된 이유
앞으로 진행할 프로젝트에서 서비스 배포와 트래픽 제어를 직접 다루게 되었고, 자연스럽게 웹 서버와 프록시 설정에 관심을 가지게 되었다. 단순히 정적 파일을 서빙하는 용도를 넘어, 리버스 프록시, 로드 밸런싱, HTTPS 적용 등 실제 현업에서 활용되는 기능들을 직접 공부하고 기록을 남기려고 한다.
Nginx의 다양한 기능
- 정적 컨텐츠 제공
- SSL 처리
- 로드 밸런싱
- 장애 대응
- 캐싱
- 보안 처리 (IP 차단, 요청 수 제한)
모두 실제 서비스를 운영할 때 필수적으로 사용하게 되는 기능들이다.
이제 AWS EC2에 Nginx를 설치하여 실습 환경을 구성해보자.
EC2 인스턴스 생성은 이미 완료된 것으로 가정하겠다.
1. Ubuntu 환경에서 Nginx 설치하기
Nginx를 설치하기에 앞서, 공식 패키지를 안전하게 설치하기 위한 보안 절차를 먼저 진행해야 한다.
이 절차는 Nginx 공식 문서의 ‘Linux packages’ 설치 페이지에 자세히 설명되어 있으며, GPG 키 등록 및 패키지 무결성 검증을 통해 안전한 설치를 보장한다. 운영체제별로 방법이 다를 수 있으므로 본인의 환경에 맞게 설정하면 된다.
# 패키지 리스트 최신화
$ sudo apt update
# nginx 설치에 필요한 라이브러리 설치
$ sudo apt install curl gnupg2 ca-certificates lsb-release ubuntu-keyring
# nginx 공식 패키지를 안전하게 설치하기 위한 보안 조치
$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
$ gpg --dry-run --quiet --no-keyring --import --import-options import-show /usr/share/keyrings/nginx-archive-keyring.gpg
$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list
# nginx 설치
$ sudo apt update
$ sudo apt install nginx
2. Nginx 실행 및 확인
# nginx 상태 확인
$ sudo systemctl status nginx
# nginx 실행
$ sudo systemctl start nginx
# nginx 상태 재확인
$ sudo systemctl status nginx
위 과정을 거치면 nginx가 정상적으로 실행 중임을 확인할 수 있다.

3. Nginx 로그 확인 방법
Nginx 설치를 완료했다면, 이제는 운영 단계에서 반드시 챙겨야 할 로그 확인 방법에 대해 알아보겠다.
운영 중인 웹 서버의 상태나 에러를 확인할 때, Nginx 로그는 필수적인 정보이다.
Nginx의 로그 파일 위치는 /var/log/nginx/ 이며 Nginx는 기본적으로 두 가지 로그를 남긴다.
- Access Log (요청 기록, 서버로 접근한 요청에 대한 정보)
- /var/log/nginx/access.log
- Error Log (오류 기록, 에러 메시지에 대한 내용)
- /var/log/nginx/error.log
Nginx 로그를 직접 확인해보면서 어떤 정보가 들어 있는지 살펴보자.
# Nginx 로그 디렉토리로 이동
$ cd /var/log/nginx
# access.log의 마지막 10줄 출력
$ tail access.log
# error.log의 마지막 10줄 출력
$ tail error.log
# access.log를 실시간으로 모니터링
$ tail -f access.log
Nginx 로그는 단순히 tail로 보는 것 외에도 시각화 도구를 통해 트래픽 분석, 에러 패턴 파악 등을 훨씬 더 직관적으로 확인할 수 있다
위 명령어를 실행하면 아래와 같이 로그가 출력된다.
39.125.178.136 - - [24/Jul/2025:14:25:18 +0000] "GET /apple-touch-icon.png HTTP/1.1" 404 153 "-" "com.apple.WebKit.Networking/20619.2.8.11.12 Network/4277.41.2 macOS/15.1.1" "-"
39.125.178.136 - - [24/Jul/2025:14:25:18 +0000] "GET /favicon.ico HTTP/1.1" 404 153 "-" "com.apple.WebKit.Networking/20619.2.8.11.12 Network/4277.41.2 macOS/15.1.1" "-"
access 로그에는 다음과 같은 정보들이 담겨있다.
- 클라이언트 IP 주소: 요청을 보낸 사용자의 IP
- 사용자 인증 정보: 인증된 사용자 이름 (대부분 비어 있음, -)
- 요청 시간: 요청이 서버에 도달한 정확한 시간
- 요청 방식과 경로: GET, POST 등 HTTP 메서드와 요청한 URL
- HTTP 프로토콜 버전: 예: HTTP/1.1
- 응답 상태 코드: 요청 처리 결과 (예: 200, 404, 500)
- 응답 바이트 수: 클라이언트에 전달된 응답 본문의 크기
- 리퍼러(Referer): 이전에 머물렀던 페이지 주소 (없으면 "-")
- User-Agent: 요청을 보낸 브라우저나 애플리케이션 정보
- 기타 헤더 정보: 필요 시 추가 설정으로 포함될 수 있는 항목 (예: X-Forwarded-For)
error 로그에는 다음과 같은 정보들이 담겨있다.
- 날짜와 시간: 에러가 발생한 시각
- 로그 레벨: 에러의 심각도 수준 (debug, info, notice, warn, error, crit 등)
- 프로세스 정보: 워커 프로세스 ID
- 요청 ID: 내부 요청 식별자 (예: *7) — 같은 요청에 대한 여러 에러를 추적할 때 사용
- 에러 메시지: 에러의 원인 및 시스템 메시지
- 클라이언트 IP: 요청을 보낸 사용자의 IP 주소
- 서버 이름: 요청이 도달한 Nginx 서버 이름 또는 가상 호스트명
- 요청 정보: 클라이언트가 보낸 요청 메서드, 경로, HTTP 버전
- 호스트 헤더: 요청 시 사용된 Host 값
'Study Notes > Nginx' 카테고리의 다른 글
| [Nginx] Nginx를 로드 밸런서로 사용하기 (2) | 2025.08.01 |
|---|---|
| [Nginx] Nginx 리버스 프록시 서버 구축 (0) | 2025.08.01 |
| [Nginx] Nginx를 활용한 HTTPS 적용 (3) | 2025.07.31 |
| [Nginx] Nginx 멀티 도메인 배포 (1) | 2025.07.29 |
| [Nginx] Nginx 기본 문법 해석하기 (2) | 2025.07.27 |