9

ロードバランサーを使用して AWS Elastic Beanstalk で動作するように、django チャネルを利用したチャットアプリを取得しようとしています。

私は基本的にhttps://github.com/jacobian/channels-exampleのコードを Elastic Beanstalk で動作するように変更しています。コマンドを使用してローカルで正常に実行できます

python manage.py runserver

問題は、Elastic Beanstalk でデプロイすると、チャット アプリの起動時に次のエラーが表示されることです。

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

https://stackoverflow.com/a/29831723/3667089で提案されたソリューションを試しましたが、別のエラーコードが表示されました

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

また、ロード バランサーのリスナー ポートを TCP 80 に変更し、SSL 証明書を取得してセキュアなリスナー ポートを SSL 443 に変更しましたが、それでも同じエラーが発生します。

AWS Elastic Beanstalk で socket.io を使用した Websocketsも読みましたが、Django のプロキシ サーバーを構成するオプションはありません。デフォルトで Apache を使用していると思います。

Elastic Beanstalk を機能させるための設定に欠けているものは何ですか?

これを変更して、daphne サーバーを asgi で実行できるようにする方法はありますか?

4

1 に答える 1

1

私は Elastic Beanstalk を使用していませんが、VPS の構成は次のとおりです。nginx とスーパーバイザーを搭載した Ubuntu 14.04。スーパーバイザーの仕事は、サーバーとワーカー プロセスが常に実行されていることを確認することです。Nginx は localhost のポート 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;
    }
}

スーパーバイザーの構成は次のようになります。スーパーバイザーを再起動するだけでサーバーを起動します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
于 2016-12-02T20:20:01.487 に答える