Время ожидания рукопожатия при открытии WebSocket истекло в https - PullRequest
1 голос
/ 21 июня 2019

Соединение WebSocket с 'wss: // ip_address: 8008 / ws / events? Subscribe-broadcast' не выполнено: истекло время ожидания открытия WebSocket

время ожидания истекло только при открытии пользовательского интерфейса в HTTPS, в HTTP его работа ...

Я сгенерировал сертификат, используя OpenSSL в Ubuntu

моя конфигурация uwsgi

socket = /tmp/uwsgi.sock   
chmod-socket = 666  
socket-timeout = 60 
chdir = <django path>
wsgi-file  = <django_path>/wsgi.py
virtualenv = <path_to_virtualenv>
vacuum = true
enable-threads  = true
threads=500
startup-timeout = 15
graceful-timeout = 15
http-socket=<my_ip>:8008
http-websockets=true

моя конфигурация nginx

server {
listen <ip>:80 default;
listen <ip>:443 ssl http2 default_server;
ssl_certificate <path>/generate_crt.crt;
ssl_certificate_key <path>/generated_key.key;
client_body_buffer_size 500M;
client_body_timeout 300s;
keepalive_timeout 5000;
client_max_body_size 700M;
access_log syslog:server=unix:/dev/log;
root /tmp/MVM_APPS/angularjs/dist;
index index.html index.htm;
server_name localhost;
location /api {
uwsgi_pass unix:///tmp/uwsgi.sock;
    include uwsgi_params;
    uwsgi_read_timeout 120;
    uwsgi_send_timeout 1000;
}
location /ws/ {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection upgrade;
proxy_pass http://<ip>:8008;
proxy_read_timeout 86400;
}
location /static {
    alias /<path>/static;
}
location / {
    try_files $uri $uri/ /index.html;
}
}

Я использую Django с пакетом WS4redis.

1 Ответ

2 голосов
/ 23 июля 2019

Чтобы веб-сокеты работали по протоколу Tls (wss), вам необходимо сгенерировать ssl-сертификаты, после генерации сертификатов добавьте следующую строку в файл uwsgi.ini.

https-socket=[ip]:[port], /path_to_server_certificate, /path_to_key

и перезапустите сервер(при желании вы также можете передать еще 2 поля [, шифры, ca]). Более подробную информацию можно найти здесь .

В качестве альтернативы, если ваш брокер сообщений способен, вы можете напрямую открыть его дляклиент использует некоторый протокол обмена сообщениями, такой как Mqtt или Stomp

...