我试图使用ssl从生产服务器上的docs通道运行该教程。
几个小时后,我设法建立了连接,但它立即断开了连接:

None - - [12/Mar/2018:17:42:22] "WSCONNECTING /ws/chat/bibou/" - -
None - - [12/Mar/2018:17:42:22] "WSCONNECT /ws/chat/bibou/" - -
None - - [12/Mar/2018:17:42:23] "WSDISCONNECT /ws/chat/bibou/" - -


我的堆栈是

ubuntu 16.04
nginx 1.10.3
channels==2.0.2
daphne==2.1.0
channels-redis==2.1.0
Twisted==17.9.0


除了room.html中的这一部分,我具有教程中代码的精确复制粘贴。

var chatSocket = new WebSocket(
    'wss://' + window.location.host +
    ':8443/ws/chat/' + roomName + '/');


这是我的nginx conf

server {
    #http
    listen 80;
    server_name domain.com;
    root /usr/share/nginx/html;
    include /etc/nginx/default.d/*.conf;

    location / {
        return 301 https://$server_name$request_uri;
    }
}

server {
    #https
    listen 443 ssl;
    listen 8443 ssl;
    server_name domain.com;
    root /usr/share/nginx/html;

    ssl_certificate "/etc/letsencrypt/live/domain.com/fullchain.pem";
    ssl_certificate_key "/etc/letsencrypt/live/domain.com/privkey.pem";
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    add_header Strict-Transport-Security "max-age=31536000";

    include /etc/nginx/default.d/*.conf;

    location /static/ {
    root /home/ubuntu;
    }

    location /media/ {
        root /home/ubuntu;
    }

    location / {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_pass http://unix:/home/ubuntu/tlebrize/Project.sock;
    }

    location /ws/ {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";

        proxy_pass http://unix:/home/ubuntu/tlebrize/Daphne.sock;
    }
}


我用daphne -u Daphne.sock Project.asgi:application -v 3运行daphne

我也尝试绕过nginx并使用sudo daphne -e ssl:8443:privateKey=/etc/letsencrypt/live/domain.co/privkey.pem:certKey=/etc/letsencrypt/live/domain.co/fullchain.pem Project.settings:CHANNEL_LAYERS
但我有相同的结果。

消息Chat套接字的前端中断意外关闭,错误代码为1011 (Internal Error),没有任何原因。

最佳答案

我设法使其工作,这是nginx和/或使用ReconnectingWebSocket的问题。这是我的整个工作会议:
Nginx的

server {
#http
listen 80;
server_name domain.co;
root /usr/share/nginx/html;
include /etc/nginx/default.d/*.conf;

location / {
    return 301 https://$server_name$request_uri;
}
}

server {
#https
listen 443 ssl;
server_name domain.com;
root /usr/share/nginx/html;

ssl_certificate "/etc/letsencrypt/live/domain.com/fullchain.pem";
ssl_certificate_key "/etc/letsencrypt/live/domain.com/privkey.pem";
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

add_header Strict-Transport-Security "max-age=31536000";

include /etc/nginx/default.d/*.conf;

location /static/ {
root /home/ubuntu;
}

location /media/ {
    root /home/ubuntu;
}

location /ws/ {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-for $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";

    proxy_pass http://127.0.0.1:8443;
}

location / {...}
}



sudo /home/ubuntu/venv/bin/daphne -e ssl:8443:privateKey=/etc/letsencrypt/live/domain.com/privkey.pem:certKey=/etc/letsencrypt/live/domain.com/fullchain.pem Project.asgi:application -v 3

js

var chatSocket = new ReconnectingWebSocket(
    'wss://' + window.location.host +
    ':8443/ws/chat/' + roomName + '/');

08-04 10:31