Nginx는 성능과 확장성이 뛰어난 웹 서버 및 리버스 프록시 서버로, 전 세계적으로 많은 웹사이트에서 사용되고 있습니다. 이 글에서는 Nginx의 특징과 사용 방법, 설정 예시 등을 상세히 설명하겠습니다.
1. Nginx란?
Nginx(엔진엑스)는 가볍고 높은 성능을 자랑하는 HTTP 및 리버스 프록시 서버입니다. 또한, 메일 프록시 서버로도 사용될 수 있습니다. Nginx는 높은 동시 접속 처리 능력과 낮은 메모리 사용량을 목표로 설계되었습니다.
Nginx의 주요 특징:
- []높은 동시 접속 처리 능력
[]낮은 메모리 사용량
[]간단한 설정 파일
[]리버스 프록시와 로드 밸런싱 기능
[]정적 콘텐츠 제공에 최적화
[]모듈 기반 아키텍처
Nginx는 대부분의 리눅스 배포판에서 패키지 관리자를 통해 쉽게 설치할 수 있습니다. 여기서는 우분투(Ubuntu)에서 Nginx를 설치하는 방법을 설명합니다.
우분투에서 Nginx 설치:
Code: Select all
sudo apt update
sudo apt install nginx
Code: Select all
sudo systemctl start nginx
sudo systemctl enable nginx
Nginx의 주요 설정 파일은 /etc/nginx/nginx.conf입니다. 기본 설정 파일 구조는 다음과 같습니다.
Code: Select all
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
events {
worker_connections 768;
}
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
swift
include /etc/nginx/mime.types;
default_type application/octet-stream;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
gzip on;
gzip_disable "msie6";
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
서버 블록은 Nginx에서 가상 호스트를 설정하는 방법입니다. 각 서버 블록은 특정 도메인이나 IP 주소로 들어오는 요청을 처리하도록 설정할 수 있습니다.
기본 서버 블록 설정 파일은 /etc/nginx/sites-available/default에 위치합니다. 예시 설정은 다음과 같습니다.
Code: Select all
server {
listen 80 default_server;
listen [::]:80 default_server;
perl
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
try_files $uri $uri/ =404;
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
Nginx는 리버스 프록시로 설정하여 백엔드 서버로 요청을 전달할 수 있습니다. 예를 들어, 다음은 Nginx를 리버스 프록시로 설정하여 백엔드 서버로 요청을 전달하는 예시입니다.
리버스 프록시 설정 예시:
Code: Select all
server {
listen 80;
server_name example.com;
bash
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
6. 로드 밸런싱 설정
Nginx는 여러 백엔드 서버에 트래픽을 분산시키는 로드 밸런싱 기능을 제공합니다. 다음은 라운드 로빈 방식으로 로드 밸런싱을 설정하는 예시입니다.
로드 밸런싱 설정 예시:
Code: Select all
upstream backend {
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}
server {
listen 80;
server_name example.com;
bash
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
7. HTTPS 설정
Nginx에서 HTTPS를 설정하려면 SSL 인증서가 필요합니다. Let's Encrypt를 사용하여 무료 SSL 인증서를 발급받을 수 있습니다. Certbot을 사용하여 SSL 인증서를 설정하는 방법을 설명합니다.
Certbot 설치 및 SSL 인증서 발급:
Code: Select all
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d example.com -d www.example.com
8. Nginx 모니터링과 로그 관리
Nginx는 서버의 상태와 트래픽을 모니터링하기 위한 다양한 로그 파일을 제공합니다. 주요 로그 파일은 다음과 같습니다.
- []/var/log/nginx/access.log: 접근 로그
[]/var/log/nginx/error.log: 오류 로그
Code: Select all
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
결론
Nginx는 높은 성능과 확장성을 자랑하는 웹 서버로, 다양한 기능을 제공하여 웹사이트 운영에 필수적인 도구입니다. 이 글에서는 Nginx의 기본 설정부터 리버스 프록시, 로드 밸런싱, HTTPS 설정, 로그 관리까지 다양한 예시를 통해 Nginx의 사용 방법을 설명했습니다. 이를 통해 Nginx를 효과적으로 활용하여 안정적이고 빠른 웹 서비스를 제공할 수 있기를 바랍니다.