2016-09-09 5 views
7

로드 균형 조정기가있는 AWS Elastic Beanstalk에서 작동하는 django 채널 기반의 채팅 응용 프로그램을 얻으려고합니다.Django 채널과 함께 Elastic Beanstalk을 사용할 때 Websocket 오류가 발생했습니다.

기본적으로 코드를 수정하여 https://github.com/jacobian/channels-example에서 Elastic Beanstalk로 작업합니다. 나는 명령을 성공적으로 로컬로 실행할 수 있어요

python manage.py runserver 

문제입니다 내가 탄성 콩 줄기와 함께 배포 할 때, 나는 채팅 응용 프로그램이 시작됩니다 다음과 같은 오류가

WebSocket connection to 'wss://mydomain.com/test/' failed: Error 
during WebSocket handshake: Unexpected response code: 200 

내가 시도 솔루션은 https://stackoverflow.com/a/29831723/3667089에서 제안하지만 그냥 내가 이미 TCP (80)에로드 밸런서 리스너 포트를 변경 다른 오류 코드

WebSocket connection to 'wss://mydomain.com/test/websocket' failed: 
Error during WebSocket handshake: Unexpected response code: 404 

을 보여 획득 SSL 리스너 포트를 SSL 443으로 변경하기위한 SSL 인증서. 그러나 여전히 동일한 오류가 발생합니다.

나는 또한 Websockets with socket.io on AWS Elastic Beanstalk을 읽었지만 Django 용 프록시 서버를 구성하는 옵션이 없다. 기본적으로 Apache를 사용하고 있다고 생각한다.

Elastic Beanstalk의 구성에서 작동하지 않는 부분은 무엇입니까?

우리가 asgi로 daphne 서버를 실행할 수 있도록 변경할 수있는 방법이 있습니까?

+0

를 다시 시작하여 서버를 시작하고 난 일하러 가야 상사를 사용했다. 채널 문서에서는 일을 처리하기 위해 서버 ('venv/bin/daphne app.asgi : channel_layer')와 작업자 ('python manage.py runwoker')를 모두 실행해야한다고합니다. 원하는 경우 답변에 내 supervisord.conf를 게시 할 수 있지만 Elastic Beanstalk에서 어떻게 작동하는지 잘 모르겠습니다. – Brobin

+0

@Brobin 네, 크게 감사하겠습니다. – user3667089

+0

죄송합니다. 너무 늦었 으면 사용중인로드 밸런서를 알고 있을까요? 고전적이라면 기본적으로 웹 소켓을 지원하지 않습니다. –

답변

0

저는 Elastic Beanstalk에 없지만 VPS에 대한 구성입니다. nginx 및 감독자가있는 우분투 14.04. 감독자의 임무는 서버와 작업자 프로세스가 항상 실행 중인지 확인하는 것입니다. Nginx에 로컬 호스트의 포트 8000에 귀를 기울이며 8080과 443

# nginx.conf 
server { 
    listen 8080 default_server; 
    server_name example.com; 
    return 301 https://example.com$request_uri; 
} 

server { 
    listen 443 default_server ssl; 
    server_name example.com; 

    # ... SSL stuff 

    # Send root to the ASGI server 
    location/{ 
     proxy_pass http://localhost:8000; 
     proxy_http_version 1.1; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
     proxy_set_header Upgrade $http_upgrade; 
     proxy_set_header Connection "upgrade"; 
     proxy_set_header Host $host; 
    } 

    # Static Files 
    location /static/ { 
     root /home/ubuntu/project; 
    } 

    # Media Files 
    location /media/ { 
     root /home/ubuntu/project; 
    } 
} 

여기 관리자에 대한 내 구성이 어떻게 생겼는지 있다고 전달합니다. 난 그저 내가 AWS VPS에 채널을 실행하고있어 관리자에게 sudo service supervisor restart

# supervisord.conf 
[program:project_server] 
directory=/home/ubuntu/project/ 
command=/home/ubuntu/project/venv/bin/daphne project.asgi:channel_layer --port 8000 --bind 0.0.0.0 

[program:project_worker] 
process_name=project_worker%(process_num)s 
numprocs=3 
directory=/home/ubuntu/project/ 
command=/home/ubuntu/project/venv/bin/python /home/ubuntu/project/manage.py runworker 

[group:project] 
programs=project_server,project_worker