2014-10-24 3 views
14

이것은 불가능한 문제 일 수 있습니다. 나는 모든 것을 시도했다. 교환 대에 어딘가에있는 남자가있는 것처럼 느껴진다.504 게이트웨이 시간 초과 -로드 밸런서가있는 두 개의 EC2 인스턴스

문제 :

나는 아마존 EC2는 응용 프로그램을 실행합니다. 하나의 인스턴스와로드 밸런서가없는 경우 문제없이 작동합니다.

하지만 제 프로덕션 환경에서는 두 개의 동일한 인스턴스가 하나의로드 균형 조정기에서 실행되며 특정 작업 (예 : PDF를 생성하고 전자 메일에 첨부하는 기능)을 수행 할 때 Google Developer를 사용할 때 아무런 변화가 없습니다. 네트워크 탭이있는 도구 시간 초과 ("30 초"설정) 오류가 발생하면 "504 게이트웨이 시간 초과"오류가 발생합니다.

내 데이터베이스는 Amazon RDS에서 외부입니다.

나는 생각한다. 클라이언트가 로그인 한 초기 서버에 연결되어 있으면이 문제는 해결 될 것이다. 인스턴스 1이 시도 할 때 504 게이트 웨이 시간 초과가 발생했다는 것을 이해하고 있기 때문이다. 작업을 수행하기 위해 인스턴스 -2에 도달해야합니다.

로드 균형 조정을 사용할 때만 발생하지만 두 서버 중 하나에 연결하면 절대 발생하지 않습니다.

로드 밸런서 설정 : app.myapplication.com 점 myloadbalancerDNSname.elb.amazonaws.com

  • 에로드 밸런서 건강 (2)를 가지도록

    • 로드 밸런서 내 등록에 CRECORD있다 인스턴스는 각각 동일한 지역에 있지만 서로 다른 가용성 영역에 있습니다.
    • 부하 분산 장치가 인스턴스와 동일한 보안 그룹을 사용합니다 (포트 22, 80 및 443의 모든 IP 허용)
    • 부하 분산 장치에 교차 영역 부하 분산이 설정되어 있습니다.
    • CORS (Amazon S3)는 *에서 *로 GET, POST, PUT, DELETE가 가능합니다 (인스턴스와 어떻게 관련이 있는지 알지 못하지만 어쨌든 지침대로 말한 것 같습니다)
    • 로드
      • 로드 밸런서 프로토콜 : 분산과 같은 구성 리스너가 HTTP 밸런서 포트로드 : 80 인스턴스 프로토콜 : HTTP 인스턴스 포트 : 80
      • 로드 밸런서 프로토콜 : HTTPS 분산 포트로드 : 443 인스턴스 프로토콜 : HTTP 인스턴스 포트 : 80 (내 CERT는 업체 당 올바르게 선택 암호 및 SSL 필드를 반드시 100 % 정확)

    좀 더 아이디어 : 말했다되고 그건

    , 나는 HTTPS와 테스트 아니에요 , 대신 정상적인 HTTP. 내 인증서 공급자가 그렇다고하더라도 SSL이 제대로 설정되었다고 확신하지는 않습니다. 내가 의심스러운 이유는 https://app.myapplication.com을 입력하려고 할 때 Google Developer Tools의 Network 탭에서 "(failed) net :: ERR_CONNECTION_CLOSED"오류가 발생하기 때문입니다.하지만 이것은 일반 HTTP를 사용하는 경우에도 문제가 발생하므로 적용 할 수 없어야합니다. 나중에 SSL 문제를 해결할 수 있습니다.

    다시 말해서, 일부 기능을 사용할 때 "504 게이트웨이 시간 초과"문제가 발생하는 경우도 있지만 페이지를로드하는 대신 드문 경우가 있습니다. 이 504 문제는로드 균형 조정을 사용할 때만 발생하지만 두 인스턴스 중 하나에 곧장 연결할 때 발생합니다.

    어떤 질문을해야할지 모르겠다. 모든 문서를 T, 두 번, 세 번 모두 웹에있는 모든 의견과 아무 것도 확인하지 않았기 때문에.

  • 답변

    2

    우선, ELB에 설정된 유휴 시간 초과는 무엇입니까? 부하 분산 장치의 "설명"탭 맨 아래에서 찾을 수 있습니다. 유휴 시간 초과에 대한 자세한 내용은 here in the ELB documentation을 참조하십시오. 기본값은 60 초입니다. 웹 서버에서 Keep-alive를 설정하거나 늘리는 것도 고려해야합니다. 그렇게하는 방법은 사용중인 웹 서버에 따라 다릅니다.

    두 번째로 클라이언트가 한 인스턴스에서 다른 인스턴스로 전환 되었기 때문에 ELB에서 session stickiness을 활성화해야합니다. 이렇게하면 클라이언트가로드 밸런서에 의해 항상 동일한 백엔드 인스턴스로 지정됩니다. 이 기능을 사용하려면 "설명"탭으로 이동 한 다음 포트 구성 섹션의 각 항목 옆에있는 편집 링크를 클릭하십시오. "로드 밸런서 생성 쿠키 끈성 사용"옵션을 선택하는 것이 좋습니다. ELB가 끈적 거리기의 모든 측면을 관리하도록 알려주기 때문입니다.

    +0

    ----> ELB의 유휴 시간 초과는 기본값 60 초입니다. 내 2 개의 인스턴스 (웹 서버가 Apache이기 때문에 /etc/apache2/apache2.conf 내부에서 관련 파일이되기를 바랍니다) 또한 Keep-alive가 켜져 있고 MaxKeepAliveRequests가 100, MaxAliveTimeout 는 5입니다. 또한 ELB에서 "로드 밸런서가 생성 한 쿠키 스틱 기능 사용"으로 세션 고정 기능을 편집했습니다. 마지막으로 최종 결과는 여전히 "504 게이트웨이 시간 초과"입니다. – user3035649

    +0

    이 경우 가능성 목록을 살펴 보길 원할 수 있습니다. http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/ts-elb-error-message.html –

    +2

    내 문제에서 일어나는 그의 콧수염을 돌고 제어 보드에서 젠체하는 사람. 나는 그 목록을 몇 번이나 훑어 보았고 모든 것이 설명되었다. 이것은 SSL과 관련이 있어야합니다 (완전히 조사하지 않은 유일한 방법). 그래서 다음 2 주 내에 SSL 설치를 해결하고 철저히 해결하고 여기에 또 다른 응답을 게시하십시오. 시간 내 주셔서 감사 드리며 귀하의 답변을 유용하다고 표시했습니다. – user3035649

    8

    어떤 웹 서버를 사용하고 있습니까? 나는 nginx 및 AWS로드 밸런싱과 매우 유사한 문제를 가지고있었습니다. 내 nginx 설정 파일에 http 블록에 keepalive_timeout 75s;을 추가 했으므로이 문제가 발생하지 않았습니다.

    당신이

    이 수정은 자신의 도움말 페이지 AWS Load balancer troubleshooting

    을에 AWS에 의해 추천되었다 (의 nginx를 시작하기 위해 레드햇 정지의 nginx /path/to/nginx/executable -s stop에. 다음 /path/to/nginx/executable을 우분투 sudo service nginx restart에) 추가하고 그 라인을 저장 한 후에의 nginx를 다시 시작해야합니다
    +2

    아파치에 대한 유사한 수정은'KeepAlive On'''KeepAliveTimeout 75'입니다. – singh1469

    3

    필자의 경우로드 밸런서에 문제가 없다는 것이 밝혀졌습니다. 최종 해결책은 Ubuntu의 호스트 파일로 끝나며 일부 미스터리 IP에서 내 애플리케이션의 호스트 이름으로 트래픽을 라우트하는 설명 할 수없는 항목이 있습니다. 따라서 PDF를 만드는 과정에서 미스테리 서버를 가리 키도록 PDF 생성기에서 경로를 다시 작성하므로 게이트웨이 시간 초과 문제가 발생합니다. 나는 왜 그것이 때때로 작동하고 실패하지 않는지 전혀 모른다.

    127.0.0.1 localhost 
    127.0.1.1 ubuntu-server 
    42.139.126.191 app.myapp.com 
    

    이 모양은 마치 제 3의 줄을 제거하고 모든 기어가 다시 돌아 오기 시작한 것입니다. : P

    1

    아마존 ELB 뒤에 Amazon EC2 인스턴스를 사용하고 504 GATEWAY_TIMEOUT 오류가 발생했습니다. 우리는 우분투 웹 서버에서 아파치와 PHP를 사용합니다.

    이 경우 서버에 메모리가 부족하여 오류가 발생했습니다. 우리는 아파치 에러 로그에서 "메모리 부족"을 보지 못했습니다. Apache 액세스 로그에는 504 행의 항목이 있습니다. 우리는 syslog 파일 (/ var/log/syslog)을 조사하여 "메모리 부족"을 확인하고 메모리 문제를 해결했습니다.

    이로 인해 504 오류가 해결되었습니다.

    0

    보안 그룹 설정을 확인하십시오. 포트 80은 액세스가 제한 될 수 있습니다.

    +0

    그러면 어떻게 작동할까요? –

    관련 문제