회사 프로젝트에서 배포 플랫폼을 사용하면 502 에러를 볼 일이 거의 없습니다. 하지만 개인 프로젝트에서 직접 서버를 운영하다 보면 서버 재시작이 불가피한 순간들이 있죠.
특히 Next.js 프론트엔드 프로젝트의 경우, 다음과 같은 상황에서 서버를 내려야 합니다:
문제는 빌드 시간이 길어질수록 사용자들이 502 Bad Gateway 에러 화면을 오래 봐야 한다는 점입니다. 이때 사용자들은 사이트가 완전히 다운되었다고 생각하고 떠날 수 있습니다.
이 글에서는 nginx 설정만으로 502 에러 시 사용자 친화적인 유지보수 페이지를 보여주는 방법을 알아보겠습니다.
sudo mkdir -p /var/www/error-pages
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>
cd /etc/nginx/sites-enabled
sudo vim default
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" 같은 무뚝뚝한 에러 메시지가 뜨면 "어? 이 사이트 망한 건가?" 하면서 바로 나가게 되잖아요. 하지만 "잠시 업데이트 중이에요, 곧 돌아올게요!" 같은 친근한 메시지가 있다면? 훨씬 안심이 되죠.
특히 개인 프로젝트를 운영하시는 분들이라면 꼭 한번 설정해보세요. 새벽에 갑자기 서버가 뻗어서 급하게 재시작할 때도, 사용자들이 "아, 관리자가 열심히 고치고 있구나" 하고 기다려줄 확률이 높아집니다.
한 번 설정해두면 계속 써먹을 수 있으니까, 시간 날 때 미리미리 준비해두시길 추천드려요! ✨