Amazon(AWS) 로드 밸런처 및 Apache에서 간헐적으로 HTTP 502 오류 발생

Amazon(AWS) 로드 밸런처 및 Apache에서 간헐적으로 HTTP 502 오류 발생

Apache Ubuntu 서버로 트래픽을 라우팅하는 Load Balancer를 AWS에 설정했습니다.

내 URL을 검색하면 모든 것이 잘 되는 경우가 있습니다. 그런 다음 새로 고침 버튼을 누르면 일부 파일을 다운로드할 때 502 오류가 발생하기 시작합니다. 매번 다른 파일이군요.

그런 다음 새로 고침을 다시 누르면 모든 것이 잘 됩니다.

현재 이 서버를 사용하는 사람은 저뿐입니다.

내 로드 밸런서는 다음과 같이 설정됩니다.

  • 가용 영역: us-east-1a 및 us-east-1b
  • 보안 그룹: 포트 80 및 443 열림
  • 리스너: 포트 80은 포트 443으로 리디렉션되고, 포트 443은 내 대상으로 전달됩니다.

내 대상 그룹은 다음과 같이 구성됩니다.

  • 대상 유형: 인스턴스
  • 프로토콜: HTTP: 80
  • 로드 밸런서: 내 로드 밸런서 이름
  • 대상 등록: 각 영역에서 1개의 인스턴스가 실행되고 있습니다.

내 Auto Scaling 그룹은 다음과 같이 구성됩니다.

  • 원하는 용량: 2
  • 최소 수용 인원: 2
  • 최대 수용 인원: 5명
  • 가용성 영역: us-east-1a, us-east-1b

내 Apache 서버는 기본 설치 값과 함께 다음과 같이 구성되어 있습니다.

  • KeepAlive 켜기
  • 타임아웃 120
  • KeepAliveTimeout 120
  • MaxKeepAlive요청 100
  • AcceptFilter http 없음
  • AcceptFilter https 없음

저는 서버 전문가도 아니고 프로그래머이기 때문에 무엇을 확인해야 할지 잘 모르겠습니다. Load Balancer 구성이 간단하다고 생각했는데...

당신의 도움을 주셔서 감사합니다

편집 2020-08-27 15h39

VPC와 로드 밸런서에서 로그를 활성화하고 페이지를 새로 고쳤습니다. 특정 파일에서 502 오류가 발생했습니다.

Load Balancer 로그에 특정 파일에 대한 502 항목이 표시됩니다. 여기에 모든 Sentive 데이터를 대체한 항목(JSON 형식)이 있습니다.

[
  {
    "type": "h2",
    "time": "2020-08-27T19:20:52.547402Z",
    "elb": "app/web-server-load-balancer/**my-load-balancer-id**",
    "client:port": "*my-ip-address*:60831",
    "target:port": "10.0.0.106:80",
    "request_processing_time": 0,
    "target_processing_time": 0.013,
    "response_processing_time": -1,
    "elb_status_code": 502,
    "target_status_code": "-",
    "received_bytes": 45,
    "sent_bytes": 610,
    "request": "GET https://**my-url** HTTP/2.0",
    "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36",
    "ssl_cipher": "ECDHE-RSA-AES128-GCM-SHA256",
    "ssl_protocol": "TLSv1.2",
    "target_group_arn": "**my-target-group-arn**",
    "trace_id": "Root=1-5f480794-150df3bcad7fd0ac6bdfc41c",
    "domain_name": "**my-domain-name**",
    "chosen_cert_arn": "session-reused",
    "matched_rule_priority": 0,
    "request_creation_time": "2020-08-27T19:20:52.534000Z",
    "actions_executed": "forward",
    "redirect_url": "-",
    "error_reason": "-",
    "target:port_list": "10.0.0.106:80",
    "target_status_code_list": "-",
    "classification": "-",
    "classification_reason": "-"
  }
]

그 데이터가 당신을 돕는 데 도움이 될지 모르겠습니다!

2020-08-31 수정 (1)

직접 액세스하기 위해 방화벽에서 두 개의 VM을 열었습니다. 각 서버에 직접 액세스하면 502 오류가 전혀 발생하지 않습니다. 로드 밸런서를 통해 액세스하면 502가 표시됩니다.

2020-08-31 수정 (2)

HTTP 트래픽을 443 포트로 리디렉션하는 대신 인스턴스로 라우팅하도록 로드 밸런서를 변경했습니다.

포트 80에서는 502 오류가 발생하지 않습니다. 여러 번 강제 새로 고침을 했는데 502가 표시되지 않았습니다. https로 로드 밸런서에 액세스하자마자 502 오류가 발생하기 시작합니다. https로 VM에 직접 접속하면 502가 나오지 않는걸로 기억합니다.

답변1

나는 다음 포럼 게시물을 발견했습니다. AWS 개발자 포럼

마지막 항목은 실제로 나에게 답을 주었다:

ALB/ELB 뒤에 있을 때 Apache의 이벤트 MPM 모듈(기본값)을 사용하고 있지 않은지 확인하세요. 동적으로 연결을 닫습니다. 작업자 MPM을 사용해 보세요.

작업자 MPM을 사용하도록 Apache 구성을 변경했는데 502 오류가 발생하지 않았습니다.

답변2

나는 작업자 MPM과 이벤트 MPM을 모두 시도했지만 둘 중 어느 것도 무작위 502를 완전히 제거하지 못했습니다. 마침내 프리포크 MPM으로 전환했고 이로 인해 문제가 해결되었습니다. 이는 ALB와 Tomcat의 중간에 있는 Apache에 있습니다.

관련 정보