Не удалось установить соединение Web Socket
На моем сайте я использую Django, WebSocket работает нормально на localhost, но когда я отправляю его на VPS (виртуальный частный сервер), я получаю ошибку WebSocket connection to wss://domain_name/ws/admin/pending/products/ failed
.
вот мой asgi.py:
import os
import django
from channels.auth import AuthMiddlewareStack
from channels.routing import ProtocolTypeRouter, URLRouter
from django.core.asgi import get_asgi_application
import api.routing
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "Naviguih_backend.settings")
django.setup()
application = ProtocolTypeRouter(
{
"http": get_asgi_application(),
"websocket": AuthMiddlewareStack(URLRouter(api.routing.websocket_urlpatterns)),
}
)
и мой routing.py:
from django.urls import path
from .consumers import AdminNotificationConsumer, NotificationConsumer
websocket_urlpatterns = [
path("ws/notifications/", NotificationConsumer.as_asgi()),
path("ws/admin/pending/products/", AdminNotificationConsumer.as_asgi()),
]
Я прочитал несколько решений, в которых говорится, что вам нужно настроить Nginx на переадресацию портов, и вот моя конфигурация:
server {
server_name domain_name;
client_max_body_size 25M;
location / {
proxy_pass http://127.0.0.1:8000;
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;
}
location /ws/ {
proxy_pass http://127.0.0.1:8000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
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;
}
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/domain_name/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/domain_name/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
if ($host = domain_name) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
server_name domain_name;
return 404; # managed by Certbot
}
и затем я пробую его и получаю ту же проблему.