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-availablesites-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 -lntpcurl http://127.0.0.1:3000으로 확인합니다.
  • proxy_pass 주소와 포트가 맞는지 확인합니다.
  • 업스트림 응답이 늦으면 proxy_read_timeout을 검토하되, 애플리케이션 지연 원인을 먼저 봅니다.
  • error.log의 connect() failed, upstream timed out 메시지를 기준으로 분리합니다.

공식 문서

BGM EVER