Nginx로 502 에러 시 사용자 친화적인 유지보수 페이지 보여주기

Maria Kim·2025년 7월 30일
0
post-thumbnail

배경

회사 프로젝트에서 배포 플랫폼을 사용하면 502 에러를 볼 일이 거의 없습니다. 하지만 개인 프로젝트에서 직접 서버를 운영하다 보면 서버 재시작이 불가피한 순간들이 있죠.

특히 Next.js 프론트엔드 프로젝트의 경우, 다음과 같은 상황에서 서버를 내려야 합니다:

  • 빌드 및 배포 과정
  • 서버 설정 변경
  • 메모리 부족으로 인한 재시작
  • EC2 인스턴스 관리

문제는 빌드 시간이 길어질수록 사용자들이 502 Bad Gateway 에러 화면을 오래 봐야 한다는 점입니다. 이때 사용자들은 사이트가 완전히 다운되었다고 생각하고 떠날 수 있습니다.

이 글에서는 nginx 설정만으로 502 에러 시 사용자 친화적인 유지보수 페이지를 보여주는 방법을 알아보겠습니다.

구현 방법

에러 페이지용 HTML 파일 생성

먼저 에러 페이지를 저장할 디렉토리를 생성

sudo mkdir -p /var/www/error-pages

유지보수 페이지 HTML 파일을 생성

sudo nano /var/www/error-pages/502.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Under Maintenance</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            text-align: center;
            padding: 50px;
            background-color: #f5f5f5;
        }
        .container {
            max-width: 600px;
            margin: 0 auto;
            background: white;
            padding: 40px;
            border-radius: 8px;
            box-shadow: 0 2px 10px rgba(0,0,0,0.1);
        }
        h1 { color: #e74c3c; }
        p { color: #666; font-size: 18px; }
    </style>
</head>
<body>
    <div class="container">
        <h1>🔧 Under Maintenance</h1>
        <p>We're currently performing some updates to improve your experience.</p>
        <p><strong>Please try again later.</strong></p>
        <p>We apologize for any inconvenience.</p>
    </div>
</body>
</html>

Nginx 설정 수정

nginx 설정 파일을 편집

cd /etc/nginx/sites-enabled 
sudo vim default

기존 server 블록에 다음 설정을 추가

server {
    listen 80;
    server_name domain.com;
    
    # 백엔드 서버
    location /api {
        proxy_pass http://your-backend-ec2-ip;
    }
    
    # 프론트엔드 서버
    location / {
        proxy_pass http://your-frontend-ec2-ip;
        
        # 코드 추가하기!!! 502 핸들링
        proxy_intercept_errors on;
        error_page 502 /502.html;
    }
    
    # 코드 추가하기!!! 유지보수 페이지 전달
    location = /502.html {
        root /var/www/error-pages;
        internal;
    }
    
}

설정 옵션 설명

  • proxy_intercept_errors on: nginx가 업스트림 서버의 HTTP 에러 응답을 가로채서 처리하도록 설정
  • error_page 502 503 504 /502.html: 502, 503, 504 에러 발생 시 커스텀 페이지로 리다이렉트
  • location = /502.html: 정확히 /502.html 경로에 대한 설정 (= 는 정확히 일치하는 경우만)
  • root /var/www/error-pages: 에러 페이지 파일들이 저장된 디렉토리 지정
  • internal: 외부에서 직접 접근 불가능하고, nginx 내부에서만 사용 가능하도록 설정

설정 적용 및 테스트

nginx 설정 파일의 문법을 검증
sudo nginx -t
문법 검증이 성공하면 nginx를 재시작
sudo systemctl restart nginx

결과 확인

마무리

설정 자체는 정말 간단하지만, 사용자 입장에서는 엄청난 차이를 만들어낼 수 있어요! 🎯

사이트에 들어갔는데 갑자기 "502 Bad Gateway" 같은 무뚝뚝한 에러 메시지가 뜨면 "어? 이 사이트 망한 건가?" 하면서 바로 나가게 되잖아요. 하지만 "잠시 업데이트 중이에요, 곧 돌아올게요!" 같은 친근한 메시지가 있다면? 훨씬 안심이 되죠.

특히 개인 프로젝트를 운영하시는 분들이라면 꼭 한번 설정해보세요. 새벽에 갑자기 서버가 뻗어서 급하게 재시작할 때도, 사용자들이 "아, 관리자가 열심히 고치고 있구나" 하고 기다려줄 확률이 높아집니다.

한 번 설정해두면 계속 써먹을 수 있으니까, 시간 날 때 미리미리 준비해두시길 추천드려요! ✨

profile
Developer, who has business in mind.

0개의 댓글