일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- fasapi
- Django
- selenium
- nginx
- WebRTC
- 자동화 도구
- AWS
- App
- docker desktop
- ubuntu
- ASGI
- GPT
- WSL
- 콘서트
- kotlin
- puppeteer
- freetds
- aiortc
- 예매
- netfunnel 우회
- linux
- 티켓
- ngrok
- realtime
- 퍼피티어
- 직링
- uvicorn
- EC2
- FastAPI
- 자동화
- Today
- Total
개발 삽질 일지
[Linux] Nginx 본문
이번 글에서는 실무에서 웹 서버로 가장 널리 쓰이는 Nginx(엔진엑스)의 개념과 역할을 소개합니다.
리눅스에서 프로젝트를 배포하고 운영하려면 꼭 알아야 하는 핵심 도구입니다.
Nginx란 무엇인가?
Nginx는 웹 서버이자 리버스 프록시입니다. 간단히 말하면, “브라우저의 요청을 받아서, 내부 애플리케이션 서버로 안전하고 빠르게 전달해주는 중간 관리자”입니다.
왜 Nginx인가?
Nginx는 2004년 러시아 개발자 Igor Sysoev가 높은 동시 접속 처리 성능을 목표로 만든 웹 서버입니다.
초창기 웹 서버 시장은 Apache가 독점하고 있었지만, Nginx는 이벤트 기반(Event-driven) 아키텍처를 채택해 더 가볍고 빠르다는 평가를 받으며 급속히 성장했습니다.
Apache vs Nginx 비교
항목 | Apache | Ngnix |
아키텍처 | 프로세스/스레드 기반 | 이벤트 기반 (비동기 I/O) |
성능 | 동시 접속자 수 많으면 무거움 | 가볍고 빠름 |
정적 파일 처리 | 상대적으로 느림 | 매우 빠름 |
설정 유연성 | .htaccess 등 다양한 방식 지원 | 설정 파일 중심 |
리버스 프록시 기능 | 상대적으로 약함 | 핵심 기능으로 탑재 |
많은 트래픽, 빠른 응답, 정적 파일 서빙, 리버스 프록시가 중요한 환경에서는 Nginx가 매우 유리합니다. 현재 대부분의 배포는 Nginx에서 되고 있다고 보셔도 무방합니다.
Nginx가 하는 일 요약
요청 수신 | 80번 포트 등으로 들어오는 HTTP 요청을 받아줍니다. |
리버스 프록시 | 요청을 Uvicorn/Gunicorn 같은 앱 서버로 넘겨줍니다. |
정적 파일 서빙 | CSS, JS, 이미지 등을 직접 처리해줍니다. |
보안 설정 | SSL 인증서 적용(HTTPS 가능)이 가능합니다 |
성능 최적화 | gzip 압축, keep-alive 등 성능 향상이 가능합니다. |
로드밸런싱 | (선택) 여러 서버로 트래픽 분산도 가능합니다. |
실제 배포 구조
[ 사용자 브라우저 ]
↓ 요청
Nginx (80/443 포트)
↓
Uvicorn / Gunicorn (8000 포트 등)
↓
Django / FastAPI 등 백엔드 서버
Nginx는 앞단에 위치한 입구 관리자(Gateway) 역할을 하며,
정적 파일은 직접 처리하고, 나머지 요청은 내부 애플리케이션 서버로 안전하게 넘깁니다.
디렉토리 구조 이해
Nginx 설정 파일은 다음과 같은 구조를 가집니다:
/etc/nginx/
├── nginx.conf # 메인 설정 파일 (공통 설정 포함)
├── sites-available/ # 서비스별 설정 파일 보관소
│ └── myproject # 내가 만든 설정
├── sites-enabled/ # 실제 적용되는 설정 목록 (링크)
│ └── myproject → ../sites-available/myproject
nginx.conf는 기본 틀 + 공통 설정만 담는 메인 파일입니다.
/etc/nginx/nginx.conf | Nginx 전체 설정의 뼈대. 공통 설정 + include |
/etc/nginx/sites-available/ | 실제 각 서비스에 대한 개별 설정을 정의 |
/etc/nginx/sites-enabled/ | 적용할 설정만 링크해서 사용 (nginx.conf가 여기 포함함) |
설정 적용 방식
설정은 sites-available/에 만들고, ln -s로 sites-enabled/에 링크를 걸어야 적용됩니다.
sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
myproject 설정 예시 살펴보기
/etc/nginx/sites-available/myproject 파일은 다음과 같이 구성되어 있습니다:
server {
listen 80;
server_name domain.com;
charset utf-8;
client_max_body_size 600M;
location /static/ {
alias /home/ubuntu/staticfiles/;
expires 30d;
access_log off;
}
location ^~ /some_api/ {
proxy_pass http://127.0.0.1:8000;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_buffering off;
}
location / {
proxy_pass http://127.0.0.1:8000;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_read_timeout 300s;
}
}
설정 요소 분석
listen 80; | 80번 포트로 들어오는 HTTP 요청을 받습니다. |
server_name domain.com; | 연결할 도메인 이름입니다. |
location /static/ | 정적 파일(CSS, JS 등)은 직접 Nginx가 처리합니다 |
location /some_api/ | /some_api/ 으로 시작하는 요청은 내부 서버(포트 8000)로 프록시 전달됩니다. |
location / | 나머지 모든 요청도 내부 서버(포트 8000)로 전달됩니다. |
이번 글에서는 Nginx가 어떤 역할을 하는지, 그리고 실제로 어떻게 설정하고 사용하는지를 알아보았습니다.
웹 서비스의 입구 역할을 하는 Nginx는, 빠른 정적 파일 처리부터 내부 서버와의 연결까지 역할을 합니다.
그러나 Nginx 혼자서 웹 서비스를 완성하지 않습니다.
그 뒤편에는 실제 애플리케이션 서버인 Uvicorn, Gunicorn 등이 동작하고 있어야 하고, 이들과 함께 구성을 해야 하나의 웹 서버 환경이 완성됩니다. 그래서..
다음 글 안내
👉 다음 글에서는 asgi 환경을 위한 uvicorn 설정 방법과, 이를 통한 Django 배포에 대해 다룹니다.
[Linux] Uvicorn
Uvicorn이란? Uvicorn은 ASGI 서버입니다.ASGI(Asynchronous Server Gateway Interface)는 WSGI의 다음 세대로, 비동기 처리를 지원합니다. 즉, FastAPI, Django Channels, 최신 웹 프레임워크를 사용할 때는 ASGI 기반의 서버
gnaaak.tistory.com
'Linux 학습 로드맵 > 3단계: 고급 - 우당탕탕 서비스 운영' 카테고리의 다른 글
[Linux] (번외) FastAPI + Django + Uvicorn (1) | 2025.05.07 |
---|---|
[Linux] Uvicorn (0) | 2025.05.02 |