Я настроил AWS Elasti c Beanstalk Multi-Container Environment, используя пользовательский образ Django -Channels, который я развертываю в Amazon ECR. Все функциональные возможности веб-сокета отлично работают при работе с протоколами HTTP и WS. Однако, когда я переключаюсь на HTTPS, все маршруты HTTPS обрабатываются должным образом, но WSS не может подключиться.
Ошибка в консоли браузера: WebSocket connection to 'wss://[REMOVED_URL]/' failed: Error during WebSocket handshake: Unexpected response code: 403
Нет ошибки в внутренних журналах, потому что кажется, что запрос от внешнего интерфейса не достигает внутреннего сервера. Я использую интерфейс React, который вызывает конечные точки серверной части Django -Rest-Framework (+ Django -Channels). Требуется ли какая-либо дополнительная конфигурация для WSS на стороне клиента?
/ docker -compose.yml
version: "3"
services:
channels:
build: .
ports:
- 80:8000
environment:
- DEBUG
- SECURITY_KEY
- DB_HOSTNAME
- DB_NAME
- DB_PASSWORD
- DB_PORT
/ Dockerrun. aws. json
{
"AWSEBDockerrunVersion": 2,
"containerDefinitions": [
{
"essential": true,
"image": "[PATH_TO_AWS_ECR_IMAGE]",
"name": "channels",
"portMappings": [
{
"containerPort": 8000,
"hostPort": 80
}
],
"memory": 256
}
],
"family": "",
"volumes": []
}
/ Dockerfile
FROM python:3.7.5
ENV PYTHONUNBUFFERED 1
ENV REDIS_HOSTS "redis"
WORKDIR /usr/src/app
RUN mkdir static
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
RUN python manage.py migrate --no-input
CMD ["daphne", "-b", "0.0.0.0", "-p", "8000", "core_backend.asgi:application"]
EXPOSE 8000
Часть сокета / индекса. js
export const setupSocket = (dispatch, path) => {
let URL = process.env.WEBSOCKET_API_URL;
const socket = new WebSocket(URL + path);
socket.onopen = () => {
let token = localStorage.getItem('token');
if (token !== null) {
socket.send(
JSON.stringify({
token: token,
type: 'CONNECTION_ESTABLISHMENT',
}),
);
}
};
...
Теперь, поскольку все запросы протокола WS правильно обрабатываются Дафной, я не добавляю routing.py и другой код, связанный с настройкой веб-интерфейса. розетки ш Django. Вышеуказанная ошибка возникает только для протоколов WSS.