Opened 9 months ago

Closed 9 months ago

#35185 closed Uncategorized (invalid)

Daphne: websocket works locally with ws protocol, but it connects and quickly disconnects in production

Reported by: Mawaki Remi Bidjada Owned by: nobody
Component: Uncategorized Version: 5.0
Severity: Release blocker Keywords: Django, Daphne, NGINX
Cc: Mawaki Remi Bidjada Triage Stage: Unreviewed
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description

Hello,

Thanks for taking the time to read the issue below.

In fact I have been struggling for two weeks trying to resolve the issue below.

Issue:
We have a Django project which uses Daphne and Django Channels. Everything works well locally (ws protocol), but only the Http requests work in production, but the wss requests do not work. In production, we use NGINX and docker.

The JS console is showing connection to 'wss://domain.tld/ws/inbox/.../' failed, and the error code is 1006.

Below is what the log shows on the server:

 "**WSCONNECTING** /ws/inbox/948252324-169626-QvepuQVR2z9odML8joreJT/" - -
 DEBUG    Upgraded connection ['192.168.16.1', 60258] to WebSocket
 INFO     test:  948252324-169626-QvepuQVR2z9odML8joreJT
 "**WSCONNECT** /ws/inbox/948252324-169626-QvepuQVR2z9odML8joreJT/" - -
DEBUG    WebSocket ['192.168.16.1', 60258] open and established
DEBUG    WebSocket ['192.168.16.1', 60258] accepted by application
DEBUG    Get address info redis:6379, type=<SocketKind.SOCK_STREAM: 1>
DEBUG    Getting address info redis:6379, type=<SocketKind.SOCK_STREAM: 1> took 0.430ms: [(<AddressFamily.AF_INET: 2>, <SocketKind.SOCK_STREAM: 1>, 6, '', ('192.168.16.2', 6379))]
DEBUG    <asyncio.TransportSocket fd=15, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=6, laddr=('192.168.16.6', 56826), raddr=('192.168.16.2', 6379)> connected to redis:6379: (<_SelectorSocketTransport fd=15 read=polling write=<idle, bufsize=0>>, <asyncio.streams.StreamReaderProtocol object at 0xffff88452670>)
DEBUG    Sent WebSocket packet to client for ['192.168.16.1', 60258]
DEBUG    WebSocket closed for ['192.168.16.1', 60258]
"**WSDISCONNECT** /ws/inbox/948252324-169626-QvepuQVR2z9odML8joreJT/" - -
INFO     close code:  1006
DEBUG    Get address info redis:6379, type=<SocketKind.SOCK_STREAM: 1>
DEBUG    Getting address info redis:6379, type=<SocketKind.SOCK_STREAM: 1> took 0.523ms: [(<AddressFamily.AF_INET: 2>, <SocketKind.SOCK_STREAM: 1>, 6, '', ('192.168.16.2', 6379))]
DEBUG    <asyncio.TransportSocket fd=12, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=6, laddr=('192.168.16.6', 56830), raddr=('192.168.16.2', 6379)> connected to redis:6379: (<_SelectorSocketTransport fd=12 read=polling write=<idle, bufsize=0>>, <asyncio.streams.StreamReaderProtocol object at 0xffff88452f70>)

We used Daphne for http and ws requests, but due to this issue and to better troubleshoot, we started using Gunicorn for http.

Below is our NGINX conf:

server {
        listen      ***:443 ssl http2;
        server_name sandbox-test.festishare.com ;
        error_log   /var/log/apache2/domains/domain.error.log error;

        ssl_certificate     ***.pem;
        ssl_certificate_key ***.key;
        ssl_stapling        on;
        ssl_stapling_verify on;

        # TLS 1.3 0-RTT anti-replay
        if ($anti_replay = 307) { return 307 https://$host$request_uri; }
        if ($anti_replay = 425) { return 425; }

        location ~ /\.(?!well-known\/|file) {
                deny all;
                return 404;
        }



        location /ws/ {
                proxy_pass http://localhost:6002/ws/;
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "upgrade";
                proxy_read_timeout 86400s;
                proxy_send_timeout 86400s;
                proxy_redirect off;
                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-Host $server_name;
                proxy_set_header Accept-Encoding gzip;
        }

        location / {
                proxy_pass http://localhost:4000/;
        }
}

We can add more information if requested.

Thanks again for the help.

Change History (1)

comment:1 by Mariusz Felisiak, 9 months ago

Resolution: invalid
Status: newclosed

Please don't use Trac as a support channel. Also, daphne is a separate package that has it's own issue tracker.

Closing per TicketClosingReasons/UseSupportChannels.

Note: See TracTickets for help on using tickets.
Back to Top