Развертывание каналов django на dcoker и использование nginx в качестве прокси-сервера
<я могу соединиться с приложением другими маршрутами, но не могу соединиться через websocket
веб-сокет обслуживается в HTTPS://EXAMPLE.COM/WS/SOCK
это мой asgi.py
application = ProtocolTypeRouter({
'http': django_asgi_app,
'websocket': AllowedHostsOriginValidator(
AuthMiddlewareStack(
URLRouter(websocket_urlpatterns)
))})
Dockerfile
FROM python:3.8
ENV PYTHONUNBUFFERED 1
WORKDIR /myproject
ADD . /myroject
RUN pip install -r /myprjoect/requirements.txt
EXPOSE 8000
CMD ["daphne", "-b", "0.0.0.0", "-p", "8000", "myproject.asgi:application"]
nginx.conf
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Forward-Proto https;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://localhost:8443/;
}
#path to proxy my WebSocket requests
location /ws/ {
proxy_pass http://localhost:8443;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection “upgrade”;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
и я использую docker-compose для создания приложения и его конфигурация такова
version: "3.8"
services:
myservice:
image: myimage
container_name: my_container
ports:
- 8443:8000
Теперь мой вебсокет работает нормально.
Чтобы решить эту проблему, мне пришлось изменить proxy_set_header Connection “upgrade”;
на proxy_set_header Connection Upgrade;