nginx ELB-HealthChecker/2.0 404 해결 및 요청 시간 변경

경쓱타드·2024년 7월 7일
0

구현

목록 보기
3/4

서버 로그를 확인하던 내가 요청하지 않은 로그를 확인했다. 요청도 5초 단위로 계속해서 와서 서버 로그가 너무 길어지고, 필요한 로그 확인도 어려워졌다.
이를 해결하는 과정을 블로그에 담아보았다. 이 글은 요청받는 로그 근원 확인 및 해결방법에 관해 작성하였다.

1. 반복되는 서버 로그 확인

************************************************************


2024-07-07 05:04:55.767  INFO 617214 --- [nio-8080-exec-9] Spring Security Debugger                 :

************************************************************

Request received for GET '/index.html':

org.apache.catalina.connector.RequestFacade@4c12e825

servletPath:/index.html
pathInfo:null
headers:
x-real-ip: 123.12.11.34
x-forwarded-for: 123.12.11.34
host: 123.12.7.9
x-forwarded-proto: http
x-nginx-proxy: true
connection: close
user-agent: ELB-HealthChecker/2.0
accept-encoding: gzip, compressed


Security filter chain: [
  DisableEncodeUrlFilter
  WebAsyncManagerIntegrationFilter
  SecurityContextPersistenceFilter
  HeaderWriterFilter
  LogoutFilter
  JwtAuthenticationFilter
  JwtVerificationFilter$$EnhancerBySpringCGLIB$$c70a8f75
  RequestCacheAwareFilter
  SecurityContextHolderAwareRequestFilter
  AnonymousAuthenticationFilter
  SessionManagementFilter
  ExceptionTranslationFilter
  AuthorizationFilter
]


************************************************************


2024-07-07 05:04:55.768  INFO 617214 --- [nio-8080-exec-9] Spring Security Debugger                 :

************************************************************

Request received for GET '/error':

org.apache.catalina.core.ApplicationHttpRequest@4edfb1b1

servletPath:/error
pathInfo:null
headers:
x-real-ip: 123.12.11.34
x-forwarded-for: 123.12.11.34
host: 123.12.7.9
x-forwarded-proto: http
x-nginx-proxy: true
connection: close
user-agent: ELB-HealthChecker/2.0
accept-encoding: gzip, compressed


Security filter chain: [
  DisableEncodeUrlFilter
  WebAsyncManagerIntegrationFilter
  SecurityContextPersistenceFilter
  HeaderWriterFilter
  LogoutFilter
  JwtAuthenticationFilter
  JwtVerificationFilter$$EnhancerBySpringCGLIB$$c70a8f75
  RequestCacheAwareFilter
  SecurityContextHolderAwareRequestFilter
  AnonymousAuthenticationFilter
  SessionManagementFilter
  ExceptionTranslationFilter
  AuthorizationFilter
]


************************************************************

위와 같이 123.12.11.34와 123.12.99.43(실제 IP 주소를 밝히지 않기 위해서 임의의 IP 주소 사용)에서 index.html을 요청해서 에러가 발생하였다.

내가 요청하지도 않았고, 주변에 프로젝트를 사용하고 있는 사람들에게 물어봐도 이런 요청을 보낸 적이 없다고 하였다. 그래서 도통 어디서 요청한건지 감이 안잡혔다.
처음에는 서버 url이 유출되어서 악성으로 요청을 보낸줄 알았는데, 그건 아닌 것 같았다. 왜냐하면 서버 url이 요청되었다면 이렇게 반복적인 요청만 보내지 않을 것이라고 생각했다.
요청을 보낸 IP 주소가 현 서버의 IP 주소와 유사한 것을 봐서는 사용 중인 EC2에서 지금 동작 중인 서버로 요청을 보낸 것 같다는 판단을 하였다. 주기적으로 요청을 보낸 것을 보면 백그라운드에서 동작 중인 프로세스 중 하나가 원인이라고 생각했다.

2. 실행 중인 프로세스 확인

ps aux

  • 위의 명령어를 통해서 실행 중인 프로세스 목록 조회
  • 가장 유력한 프로세스가 nginx로 추정

3. nginx 동작

  1. nginx가 정상적으로 동작 중
systemctl status nginx

  1. nginx 로그 확인
tail -f /var/log/nginx/proxy/access.log
123.12.11.34 - - [07/Jul/2024:04:44:24 +0000] "GET /index.html HTTP/1.1" 404 66 "-" "ELB-HealthChecker/2.0"
123.12.99.43 - - [07/Jul/2024:04:44:27 +0000] "GET /index.html HTTP/1.1" 404 66 "-" "ELB-HealthChecker/2.0"
  • 서버에 계속해서 오던 요청이 nginx가 보낸 것임을 확인
  • ELB-HealthChecker/2.0 404 에러 해결하기

4. ELB-HealthChecker/2.0 404 에러 해결

  1. AWS Management Console 로그인 → EC2 대시보드 이동 → 로드 밸런서
    https://ap-northeast-2.console.aws.amazon.com/ec2/home?region=ap-northeast-2#LoadBalancers:
  • 로드밸런스에서 확인해봤을 때 대상 그룹에서 비정상적인 에러(404)가 확인됨
  1. 대상 그룹 확인

  • 대상 그룹에서 확인해봤을 때 404(Unhealthy) 에러 확인
  1. 상태 검사 확인
  • index.html 연결을 통해서 상태 검사를 확인함
  1. ec2에서 html 파일 확인
ls /var/www/html
index.nginx-debian.html
  • index.html 이 아니라 다른 파일이 존재
  • index.html 파일 말고 EC2 서버 요청을 받을 수 있는 API 설정하기
  1. 상태 검사 편집
  • health-check용 API 생성해서 상태 검사
  1. 정상 확인
  • 404 오류는 해결했지만 요청을 약 5초 간격으로 계속 됨

5. ELB-HealthChecker 시간 변경

  1. 상태 검사에서 간격 변경
  • 값은 5 ~ 300초 사이만 가능, 이외의 시간은 NGINX PLUS 사용하기
profile
백엔드 개발자를 시작으로 도메인 이해도까지 풍부한 개발자가 목표입니다!

0개의 댓글