3

배경웹 소켓은 EC2 URL을하지만 ElasticBeanstalk의 URL에서 작동

내가 가지고있는 리버스 프록시 (의 nginx)는 singleInstance 환경 유형과 EC2 인스턴스를 생성 ElasticBeanstalk (ELB)를 가리키는 (EC2). 내가 dockerized nodejs 응용 프로그램을 사용하고 있습니다. nginx은 우리 인프라의 진입 점입니다. 브라우저에서

Desciption

, 내가 직접 EC2의 웹 소켓 URL을 호출하고 동일한 결과 ELB 수 있습니다

에 오신 것을 환영합니다 SockJS에!

나는 다음과 같은 설정을 사용nginx를 들어 (의 nginx conf.d/my.conf) 난 단지 proxy_pass로 시작하는 줄에 EC2 또는 의 ELB을 URL을 변경 :

location /stomp { 
     proxy_pass <{EC2_URL}/stomp OR {ELB_URL}/stomp>; 
     proxy_http_version 1.1; 
     proxy_set_header Upgrade $http_upgrade; 
     proxy_set_header Connection "upgrade"; 
     proxy_set_header Host $host; 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
     proxy_set_header X-Forwarded-Proto $scheme; 
    } 

의 웹 소켓 EC2 URL이 제대로 작동합니다.

코드 : 1002 이유 : "서버에 연결할 수 없습니다"

이상한 일이 있다는 것입니다 ELB URL에

WebSocket을 내 클라이언트에 다시 오류 상태를 반환 내 nginx 서버는 심지어 ELB의 경우 요청을 기록하지 않습니다.

가 왜 ELB의 nginx 구성에서 작동하지 않는 질문? 그것을 고치는 방법?

나는 무엇을 시도 했습니까? 그들이 조언 located in /tmp/deployment/config/etc#nginx#nginx.conf에 위치한 00_elastic_beanstalk_proxy.conf처럼의 nginx 설정 파일을 대체 할 곳

나는 questionblog을 확인했다. 하지만 내 서버에는 파일 시스템에 nginx 설정 파일이 없습니다 ...

+0

그럼 nginx는 귀하의 경우에 실행중인가요? –

+0

연결하려는 포트는 무엇입니까? 기본 Load Balancer 설정은 포트 80 또는 포트 443에서만 트래픽을 처리 할 수 ​​있습니다. SSL을 사용하는 경우 ElasticBeanstalk로 인증서를 설정합니까? Nginx 측에서 요청을받지 못하면 Load Balancer에서 절대로 포워딩 할 수 없습니다. 로드 밸런서를 보려면 AWS 패널에서 EC2 ->로드 밸런서로 이동해야합니다. – jonzlin95

+0

@ jonzlin95 우리는 포트 80을 통해 연결하고 있습니다. 'EC2 →로드 밸런서'에 나열된로드 밸런서는 없지만 놀랍지는 않습니다. 왜냐하면 우리는 ELB를 SingleInstance 환경 유형으로 만 사용하기 때문입니다. – zatziky

답변

1

이 문제는 proxy_set_header Host $host;와 관련이 있습니다. 문제는 다른 서버가 호스트 이름 헤더에 반응하는 방식 때문입니다.당신이

http://ec2-52-59-53-38.eu-central-1.compute.amazonaws.com/stomp http://stag-ws-server.eu-central-1.elasticbeanstalk.com/stomp

하나 인 EC2 및 One을 ELB되는 브라우저

에 아래의 URL을 열 때

고려. ec2에 요청을 보내면 호스트 이름은 ec2-52-59-53-38.eu-central-1.compute.amazonaws.com으로 전송됩니다. 이제 포트 80에서 직접 또는 도커를 통해 수신 대기하는 서비스가있는 경우 그것은 포트 80을 듣고 트래픽이 어떻게되는지 신경 쓰지 않습니다.

누군가가 서버에 접속하면 우리가 응답한다는 것을 알고 있습니다. 이제 해당 EC2에 nginx가있는 경우 특정 가상 호스트를 수신하고 다른 호스트 이름에 응답하지 않습니다. 그러면 ec2-52-59-53-38.eu-central-1.compute.amazonaws.com을 보내면 abc.mydomain.com이 표시 될 것으로 예상하고 nginx는 요청에 응답하지 않습니다.

동일한 경우 ELB 서버에서 발생합니다. 일부 도메인 이름 abc.domain.com에서 nginx를 호스팅하고 proxy_pass을 사용하여 트래픽을 ELB에 전달합니다. 그러나 proxy_set_header Host $host;을 사용하여 호스트 이름을 abc.domain.com으로 설정하면 ELB는 해당 호스트의 위치를 ​​이해할 수 없습니다. 그래서 서버 요청 및 따라서 오류가

관련 문제