Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Django channels work on local but not on server, Error during WebSocket handshake

Website is loading fine but the channels are not working. In console I get: WebSocket connection to 'ws://fortests.ovh/8' failed: Error during WebSocket handshake: Unexpected response code: 404

Server: Ubuntu 16.04 on Digital Ocean nginx version: nginx/1.10.0 (Ubuntu) Redis server v=3.2.8

my settings.py:

CHANNEL_LAYERS = {
    'default': {
        'BACKEND': 'asgi_redis.RedisChannelLayer',
        'CONFIG': {
            'hosts': [('localhost', 6379)],
        },
        'ROUTING': 'slist.routing.channel_routing',
    }
}

wsgi.py

import os

from django.core.wsgi import get_wsgi_application

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "slist.settings")

application = get_wsgi_application()

consumers.py

import json
from channels import Group
from channels.auth import channel_session_user_from_http, channel_session_user

from .models import Item

# Connected to websocket.connect
@channel_session_user_from_http
def ws_add(message):
    # Accept the connection
    message.reply_channel.send({"accept": True})
    # Add to the users group
    Group("users").add(message.reply_channel)

routing.py

from channels.routing import route
from tobuy.consumers import ws_add, ws_receive, ws_disconnect

channel_routing = [
    route("websocket.connect", ws_add),
    route("websocket.receive", ws_receive),
    route("websocket.disconnect", ws_disconnect),
]

js

var socket = new WebSocket('ws://' + window.location.host + '/' + {{ active_list.id }});

nginx settings

server {
    listen 80;
    server_name server_name fortests.ovh;

location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
    root /home/kuba1/slistproject/slistvenv/src;
}

location / {
    include proxy_params;
    proxy_pass http://unix:/home/kuba1/slistproject/slistvenv/src/slist.sock;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";

}
}
like image 597
Jakub_S Avatar asked Nov 08 '22 22:11

Jakub_S


1 Answers

I also had above 404 error when using daphne (channels 2) in a docker setting. In ended up with below nginx conf:

map $http_upgrade $connection_upgrade {
    default upgrade;
    '' close;
}

upstream websocket {
        server daphne:8000;
}


server {
  listen 80 default_server;
  server_name  localhost;


  root   /var/www;
  location /static {
      index  index.html index.htm;
  }

  location / {
      root /var/www;
      try_files $uri $uri/index.html @daphne;

      expires max;
      access_log off;
  }

  location @daphne {
    proxy_pass http://websocket;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;

  }

where daphne (on line 5) was the name of the container running the daphne process.

like image 80
Wessel Avatar answered Nov 15 '22 04:11

Wessel