[NGINX] NIGINX 란 무엇일까? | NGINX 설치 (ubuntu)
1. NGINX란 무엇일까?
NGINX (pronounced "engine x" or "en-jin-eks") is the world's most popular Web Server, high performance Load Balancer, Reverse Proxy, API Gateway and Content Cache.
NGINX(발음: "엔진 x" 또는 "엔진엑스")는 세계에서 가장 인기 있는 웹 서버, 고성능 로드 밸런서, 리버스 프록시, API 게이트웨이 및 콘텐츠 캐시입니다.
- nginx 깃허브
nginx(엔진 엑스)는 웹 서버 소프트웨어로, 가벼움과 높은 성능을 목표로 한다. 웹 서버, 리버스 프록시 및 메일 프록시 기능을 포함한다.
Nginx는 요청에 응답하기 위해 비동기 이벤트 기반 구조를 가진다.
이것은 아파치 HTTP 서버의 스레드/프로세스 기반 구조를 가지는 것과는 대조적이다.
이러한 구조는 서버에 많은 부하가 생길 경우의 성능을 예측하기 쉽게 해준다.
- 위키백과
NGINX(엔진엑스)는 웹 서버이자 리버스 프록시(reverse proxy), 로드 밸런서(load balancer) 역할을 수행하는 오픈 소스 소프트웨어 입니다.
특히 속도가 빠르고 가벼우며, 수많은 동시 접속을 처리할 수 있는 웹 서버로 유명하죠.
웹 서비스에서 웹 트래픽을 효과적으로 관리하고 부하를 분산하는 기능을 수행할 수 있어서, 전 세계적으로 수많은 대형 서비스(Netflix, Airbnb, GitHub 등)에서 사용하고 있습니다.
2. NGINX의 주요기능
NGINX는 단순한 웹 서버가 아니라, 다양한 기능을 수행할 수 있습니다.
1. 웹 서버(Web Server)
- NGINX는 Apache처럼 웹 서버 역할을 수행할 수 있어.
- 정적 파일(HTML, CSS, JS, 이미지 등)을 빠르게 서빙할 수 있음.
- 가벼운 구조 덕분에 고성능 HTTP 요청 처리가 가능함.
2. 리버스 프록시(Reverse Proxy)
- 클라이언트 요청을 실제 서버(백엔드)로 전달하는 역할.
- 예를 들어, NGINX가 앞단에서 요청을 받아서 Node.js, Spring, Django 등의 백엔드 서버로 전달할 수 있음.
- 보안 강화, 로드 밸런싱, 캐싱 기능 제공.
3. 로드 밸런서(Load Balancer)
- 여러 개의 서버(백엔드)로 트래픽을 분산시키는 역할.
- 특정 서버에 부하가 집중되지 않도록 트래픽을 고르게 배분할 수 있음.
- 고가용성(HA, High Availability)을 유지하는 데 필수적임.
4. 캐시 서버(Cache Server)
- 정적 컨텐츠(HTML, CSS, JS 등)를 캐싱하여 성능을 향상시킬 수 있음.
- 사용자가 같은 요청을 보낼 때 캐싱된 응답을 반환하여 서버 부하를 줄일 수 있음.
5. 보안 강화 (SSL/TLS 암호화, DDoS 방어)
- HTTPS 적용을 위한 SSL/TLS 암호화(HTTPS 설정) 가능.
- 특정 IP 차단, DDoS 공격 방어, HTTP 요청 필터링 등의 보안 기능을 제공.
즉, NGINX는 웹 서버뿐만 아니라, 리버스 프록시, 로드 밸런서, 캐시 서버 등의 역할을 수행하는 도구입니다.
3. NGINX 동작 방식
위키백과에 따르면 Nginx는 비동기 이벤트 기반 구조를 가지고 있고,
기존 웹 서버(Apache)의 스레드/프로세스 기반 구조를 가지는 것과는 대조적이라고 한다.
즉, 아파치는 '스레드 기반'모델을 사용함으로써 각 요청마다 쓰레드를 생성하여 처리하는 방식인데,
Nginx는 각 요청을 개별 프로세스가 아니라 하나의 이벤트로 처리하는 방식 입니다.
그럼 아파치의 동작과 Nginx의 동작과정을 비교해보자
Apache의 동작 방식
- 사용자가 요청(HTTP 요청)을 보내면 새로운 프로세스(또는 쓰레드)를 생성함.
- 요청이 많아질수록 각 요청마다 새로운 쓰레드를 생성함.
NGINX의 동작 방식
- 마스터 프로세스(Master Process)가 실행됨 → 설정 파일(nginx.conf)을 읽고 워커 프로세스를 관리함.
- 여러 개의 워커 프로세스(Worker Process)가 생성됨 → 실질적으로 요청을 처리하는 역할을 함.
- 클라이언트(사용자)가 요청을 보내면, 각 워커 프로세스가 이벤트 방식으로 요청을 처리함.
- 한 번의 워커 프로세스가 여러 요청을 동시에 처리할 수 있음.
쉽게 비유를 통해서 설명하자면
Apache는 '택시'
NGINX는 '버스' 라고 생각하면 쉬울 것 같다.
NGINX는 아래와 같이 2가지 프로세스 구조를 가지고 있습니다.
마스터 프로세스 (Master Process)
- 설정 파일(/etc/nginx/nginx.conf)을 로드하고, 워커 프로세스를 관리함.
- 직접 요청을 처리하지 않고, 워커 프로세스를 생성하고 관리하는 역할을 함.
워커 프로세스 (Worker Processes)
- 실질적으로 클라이언트의 요청을 처리하는 프로세스.
- 한 개의 워커 프로세스가 여러 개의 요청을 비동기적으로 처리할 수 있음.
- CPU 코어 개수에 따라 여러 개의 워커 프로세스를 생성할 수 있음.
systemctl nginx status를 입력해보면 현재 동작하고있는 master process, Worker process를 볼 수 있습니다.
저의 nginx는 defalut값으로 1개의 master process와 1개의 worker process를 사용하고 있습니다.
여기에서 worker process 숫자를 변경하고 싶다면 nginx.conf를 변경하면 됩니다.
vi /etc/nginx/nginx.conf
conf에다가 worker_processes를 추가/수정하고 nginx를 restart 해주면 적용된다.
워커가 2개로 늘어난 것을 확인할 수 있다.
woker prcesses와 master processes를 알았으니 이제 본격적으로 설치를 해보자
4. NGINX 설치과정 (ubuntu 기준)
4.1 NGINX 설치 (ubuntu 기준)
sudo apt update
sudo apt install nginx -y
4.2 NGINX 상태 확인 및 실행
nginx -v # NGINX 버전 확인
sudo systemctl status nginx # NGINX 상태 확인
sudo systemctl start nginx # NGINX 시작
sudo systemctl stop nginx # NGINX 중지
sudo systemctl restart nginx # NGINX 재시작
4.3 방화벽 설정 (선택, *주의*)
ufw 방화벽을 실행중인 경우 Nginx에서 프로필을 허용해야한다.
아래와 같이 구성되어있다.
Nginx Full – This opens both port 80 & 443 (For SSL / TLS encryption).
Nginx HTTP – This open only port 80 ( For unencrypted web traffic).
Nginx HTTPS – Opens only port 443 (For SSL / TLS encryption).
sudo ufw enable # 방화벽 활성화
sudo ufw allow 'Nginx Full' # NGINX의 HTTP/HTTPS 트래픽 허용
*여기에서 종료하면 큰일납니다. 아래 커맨드를 입력해주세요.*
sudo ufw allow ssh #이걸 해주셔야 SSH 접속 가능합니다.
sudo ufw allow mysql #이걸 해주셔야 mysql 접속 가능합니다.
sudo ufw reload # 방화벽 변경사항 리로드
sudo ufw status # 방화벽 상태확인
잘 적용이 된 것을 확인할 수 있다.
5. NGINX 설정 변경 (로드밸런서, 리버스 프록시)
Nginx 관련한 디렉토리 경로는 기본적으로 /etc/nginx이고, 파일 구조는 아래와 같습니다.
파일마다 역할하는 부분은 개발자마다 다른 것 같습니다.
저는 nginx.conf 에다가 모든 코드를 몰아넣는 것 보다는 추가 설정파일을 불러오는 방식을 사용합니다.
예를 들면 아래와 같습니다.
http {
include /etc/nginx/conf.d/*.conf; # conf.d 안의 모든 .conf 파일 포함
include /etc/nginx/sites-enabled/*; # sites-enabled 안의 모든 설정 포함
}
/etc/nginx/
│── nginx.conf # 🔹 전체 NGINX 전역 설정 파일
│── sites-available/ # 🔹 개별 사이트 설정 저장
│── sites-enabled/ # 🔹 활성화된 사이트 설정 (심볼릭 링크를 통해 nginx에 반영)
│── conf.d/ # 🔹 추가 설정 파일 저장 (공통 설정, 로드 밸런서, 리버스 프록시 설정 가능)
│── modules-enabled/ # 🔹 활성화된 모듈 저장
│── snippets/ # 🔹 재사용 가능한 설정 파일 저장 (SSL 설정 등)
│── proxy_params # 🔹 리버스 프록시 기본 설정
│── mime.types # 🔹 파일 확장자별 MIME 타입 설정
│── fastcgi_params # 🔹 PHP-FPM 같은 FastCGI 설정 저장
│── /var/log/nginx/ # 🔹 NGINX 로그 파일 저장 위치
│ ├── access.log # 🔹 모든 요청 기록 (웹 서버 접근 로그)
│ ├── error.log # 🔹 오류 발생 기록 (오류 로그)
위 구조에서 저는 conf.d에다가 로드 밸런서, 리버스 프록시 설정을 넣어놨는데
이건 같은 서버에서 관리되므로 하나의 NGINX 설정 파일에서 관리하는게 나을 것 같아서 그렇게 정의했습니다.
예를 들어서)
하나의 서버에 포트번호만 다르게해서
dev(3000), prod(4000) 서버를 분리하는 것 과 같습니다.
설정 파일과 관련 한 내용은 길어질 것 같아서 다음 포스팅에서 계속 진행하겠습니다.
참고링크
https://github.com/nginx/nginx
GitHub - nginx/nginx: The official NGINX Open Source repository.
The official NGINX Open Source repository. Contribute to nginx/nginx development by creating an account on GitHub.
github.com
https://ko.wikipedia.org/wiki/Nginx
nginx - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전.
ko.wikipedia.org
nginx
nginx nginx ("engine x") is an HTTP web server, reverse proxy, content cache, load balancer, TCP/UDP proxy server, and mail proxy server. Originally written by Igor Sysoev and distributed under the 2-clause BSD License. Enterprise distributions, commercial
nginx.org
https://velog.io/@xangj0ng/Linux-Ubuntu-Nginx-%EC%84%A4%EC%B9%98
[Linux] Ubuntu Nginx 설치
nginx란? 래픽이 많은 웹사이트의 서버(WAS)를 도와주는 비동기 이벤트 기반구조의 경량화 웹 서버 프로그램이다. 클라이언트로부터 요청을 받았을 때 요청에 맞는 정적 파일을 응답해주는 HTTP Web
velog.io