IT/Server

[WebServer] Nginx 디폴트 에러페이지 설정하기

음료요정 2021. 4. 21. 13:57

 

 

 

 

 

 

- 계기 

 

pinpoint 화면

 

회사에서 새 운영업무를 맡으면서 여러가지 오류들을 개선했었다. 근 6개월 정도 시스템을 고쳐오면서, 달에 한번씩은 504 Bad Gateway Time-out 메세지가 뜨거나 메뉴트리구조가 안 뜨는 현상이 생겨 확인을 해보았다.

pinpoint를 보니 특정 ip로부터 1분에 한번씩 10시간 가까이 호출이 왔고 

없는 uri로 호출이 되어 리스폰스를 찾던 Tomcat이 응답이 점점 길어지면서 과부하되어 다운되어 버린 것이었다. 

지속적인 취약점 스캔툴 공격으로 인지하고 클라우드 보안파트에 연락해 ELB 쪽에 해당 IP를 차단 요청했지만

다른 IP 로 지속적인 공격이 왔고, 해결할 방법이 없나 고민하다가 서버 부하를 줄이기위해 웹서버 설정을 하고, nginx에 디폴트 에러페이지를 설정해주기로 했다.

 

504 Gateway Time-out 이 발생한 것은 nginx의 리버스 프록시에서 upstream 으로 톰캣을 찾을때 서버가 죽어있었고,  통신 시간이 리버스 프록시에서 지정한 시간 제한을 초과해서 발생한것이었다

 

 

 

 

 

이 화면이 나오며 먹통이었다

 

 

 

 

- 설정방법

Nginx에서는 HTTP Status Code 값에 따라서 디폴트 에러페이지를 지정할 수 있다.

메인 설정 conf 파일의 server 블록에서 수동 지정이 가능하다.

 

server { 
        ##... 여러가지 설정들
        
        #redirect error pages to static page /x0x.html
        # 여러 에러코드들을 한꺼번에 처리 가능하다.
        error_page 403 404 405 406 411 497 500 501 502 503 504 505 /error.html;
        location = /error.html{
            root /usr/share/nginx/html;
        }
        
        
        # 해당 호스트 전체에 대한 에러페이지 처리도 가능하다.
        location /test{
        	...
        }
        
        
        # upstream 설정을 이용하여 특정 URL로 에러페이지 설정을 할 수 있음
        location /test{
        	error_page 404 = @try_server1;
        }
        location @try_server1{
        	proxy_pass http://error;
        }
        
}

 

 nginx html 페이지 기본 경로는 /usr/share/nginx/html 이다. 

 이 위치에 설정할 static html을 만들어 넣고,

 conf파일을 수정 한 뒤에 nginx 서비스 reload를 하면 적용됨을 확인할 수 있다

 

sudo service nginx reload

 

 

 

 

- 유의

Nginx의 기본 에러페이지는 서버의 정보를 노출 할수 있으니 커스템 페이지로 수정을 권고한다.

서비스에 의존성이 있는 페이지가 아닌 static한 HTML 페이지를 사용해야한다. 

리소스를 찾는데 문제가 없도록 상대경로가 아닌 절대경로로 설정을 한다. 

 

 

 

'IT > Server' 카테고리의 다른 글

[Pinpoint] Pinpoint란?  (0) 2021.06.10
[JPA]JPA란?  (0) 2021.05.27
[Spring] @RequestMapping-> @GetMapping , @PostMapping  (0) 2021.05.12
[HTTP] Error Code 정리 ( 정리중 )  (0) 2021.04.21
[WebServer] Nginx란?  (0) 2021.04.21