Nginx 소개와 설치 가이드
Nginx 설치와 운영 가이드입니다. systemd 시작, server block, 정적 사이트, reverse proxy, proxy headers, WebSocket, nginx -t/reload, 로그와 502/504 분리 기준을 정리했습니다.
Nginx는 정적 파일 웹 서버, reverse proxy, TLS termination, load balancing 앞단으로 많이 쓰입니다. 설치 후 기본 페이지 확인에서 끝내지 말고, 설정 문법 검사, server block, 로그, reload 절차를 함께 익혀야 운영에서 안전하게 바꿀 수 있습니다.
설치
# Ubuntu/Debian
sudo apt update
sudo apt install -y nginx
# RHEL/Rocky/Alma
sudo dnf install -y nginx
시작과 상태 확인
sudo systemctl enable --now nginx
sudo systemctl status nginx --no-pager
nginx -v
curl -I http://127.0.0.1/
방화벽을 쓰는 서버에서는 HTTP/HTTPS를 허용합니다.
# UFW
sudo ufw allow 'Nginx Full'
# firewalld
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
정적 사이트 server block
sudo install -d -m 755 /var/www/example
echo 'hello nginx' | sudo tee /var/www/example/index.html
server {
listen 80;
server_name example.com;
root /var/www/example;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
Ubuntu/Debian 계열에서는 보통 /etc/nginx/sites-available와 sites-enabled를 사용하고, RHEL 계열은 /etc/nginx/conf.d/*.conf를 많이 사용합니다.
sudo nginx -t
sudo systemctl reload nginx
reverse proxy 예시
Nginx 공식 reverse proxy 문서처럼 proxy_pass로 upstream 애플리케이션에 요청을 넘길 수 있습니다.
server {
listen 80;
server_name app.example.com;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
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;
}
}
WebSocket이 필요한 앱은 Upgrade 헤더도 추가합니다.
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
로그 확인
sudo tail -f /var/log/nginx/access.log
sudo tail -f /var/log/nginx/error.log
journalctl -u nginx -n 100 --no-pager
운영 변경 순서
Nginx 설정을 바꿀 때는 항상 문법 검사 후 reload를 사용합니다. restart는 순간적으로 연결을 끊을 수 있으므로 일반 설정 반영은 reload가 적합합니다.
sudo cp -a /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak.$(date +%Y%m%d_%H%M%S)
sudo nginx -t
sudo systemctl reload nginx
502/504가 날 때
- backend가 떠 있는지
ss -lntp와curl http://127.0.0.1:3000으로 확인합니다. proxy_pass주소와 포트가 맞는지 확인합니다.- 업스트림 응답이 늦으면
proxy_read_timeout을 검토하되, 애플리케이션 지연 원인을 먼저 봅니다. - error.log의
connect() failed,upstream timed out메시지를 기준으로 분리합니다.