(Nginx + Daphne + Django) Ошибка во время рукопожатия WebSocket: неожиданный код ответа: 404 - PullRequest
0 голосов
/ 13 января 2020

У меня есть приложение Django (3.0), использующее Дафну в качестве контейнера приложения и Nginx в качестве прокси-сервера.

Дафна -u /home/ubuntu/virtualenvs/src/app/app.sock app.asgi: application

Моя проблема заключается в том, что не удалось установить соединение с веб-сокетом.

(индекс): 16 Ошибка подключения WebSocket к 'ws: //example.com/ws/chat/1/': ошибка при рукопожатии WebSocket: неожиданный код ответа: 404

Я почти уверен, что настройки и маршрут моего приложения в порядке.
Потому что, если я остановлю Nginx, привяжите Дафну к 0.0.0.0:8000 и используйте реальный IP ("ws: // xx. xx.xx.xx: 8000 / ws / chat / 1 ") в качестве URL-адреса, соединение веб-сокета установлено и очень стабильно.
Как мне изменить мой Nginx, чтобы веб-сокет работал?

#my nginx setting

upstream websocket {
    server unix:/home/ubuntu/virtualenvs/src/app/app.sock;
}
#websocket settings
map $http_upgrade $connection_upgrade {
    default upgrade;
    '' close;
}

server {
listen 80;
listen [::]:80 default_server;
listen 443 SSL default_server;
listen [::]:443 SSL default_server;
server_name example.com;
return 301 https://example.com$request_uri;
ssl on;
# certificate settings
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_session_timeout 10m;
#ssl_session cache shared:SSL:1m;
#ssl_protocols TLSv1 TLSv1.1 TLSv1.2 SSLv2 SSLv3;
#ssl_prefer_server_ciphers on;
#ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!$

location / {
    root /home/ubuntu/virtualenvs/
    include proxy_params;
    proxy_pass https://websocket;

    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-Proto $scheme;
    proxy_set_header X-Frame-Options SAMEORIGIN;
    proxy_pass_request_headers on;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    }

location ~* \.(js|css)$ {
    expires -1;
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...