오늘은 nginx 에서 503 error에 대한 처리 방법에 대해 알아 보겠습니다.
HTTP 503 오류는 일반적으로 다음과 같은 상황에서 발생합니다.
- 서버 부하가 많을 때
- 유지 보수를 위한 서버 다운 시간일 때
- 서버 장애 발생 시
저는 오늘 유지보수를 위한 서버 다운 시간을 가정하에 내용을 작성하고자 합니다.
[ config 해설 ]
1. geo 모듈에 $dev_ip 변수를를 설정하여 myipaddress부분에 자신의 아이피를 설정 합니다.
2. if 문에 $dev_ip 를 비교 조건으로 하여 1설정 되어 있으면, break 로 빠저나가 location / { } 블록을 만나게 합니다.
1로 설정해야 할 ip는 개발자나, 엔지니어 사이트 관리자의 IP가 될 것입니다.
3. if (-f) 는 위 조건에 해당하지 않을 시 /data/maintenance/fun-errorpages/errorpages/50x.html 파일이 있을 시에만 true가 되며, 서버 점검시 해당 파일을 생성하고 점검이 끝나면 지우거나 다른 파일명으로 변경합니다.
그리고, true 일때 return 값을 503으로 발생십니다.
4. error_page 지시어를 통해 에러처리를 하며, @maintenance로 리다이렉션 시켜줍니다.
5. location @maintenance{} 를 통해 return 시켜줍니다.
main.conf
geo $dev_ip {
default 0;
myipaddress 1;
}
server {
listen 80;
server_name empathize.com www.empathize.com;
access_log /var/log/nginx/v-access.log;
error_log /var/log/nginx/v-error.log;
if ($dev_ip = 1) {
break;
}
if (-f /data/maintenance/fun-errorpages/errorpages/50x.html) {
return 503;
}
error_page 503 @maintenance;
location @maintenance {
return http://mc.empathize.com;
}
location / {
root /data/maintenance/ted;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
}
두번째 파일은 maintenance페이지를 출력하기 위한 설정입니다.
해당 파일에서 deny all 부분은 점검이 끝난 후 주석을 제거 하면 됩니다. 그렇게 되면 해당 페이지 접근이 되지 않을 것입니다.
maintenance.conf
server {
listen 80;
server_name mc.empathize.com;
access_log /var/log/nginx/mc-access.log;
error_log /var/log/nginx/mc-error.log;
#deny all;
location / {
root /data/maintenance/fun-errorpages/errorpages;
index index.html index.htm 50x.html;
try_files $uri $uri/ /50x.html;
}
}
혹시 잘 되지 않으신 분들이 계시면 도와드리겠습니다.
'서버인프라 > 엔진엑스' 카테고리의 다른 글
Nginx location 구분 (2) | 2023.03.14 |
---|---|
NGINX more_set_headers를 설치 (2) | 2022.11.30 |
[GeoIP 모듈] Nginx Geo IP 모듈 설치 (2) | 2022.11.17 |
사설 ssl인증서 적용 (0) | 2022.10.17 |
[ 제5강 캐싱 ] NGINX 콘텐츠 캐싱 (0) | 2021.01.22 |
댓글