LINUX.ORG.RU

Намертво зависает Debian при проксировании WebSocket с iPhone... Помогите!

 , , , ,


0

1

Версии:
ESXi v6.5.0
Debian v9.6
Nginx v1.10.3

Системные параметры:
CPU - 4
RAM - 2 GB

Проблема:
На виртуалке поставлен Debian 9.6 c 4 ядрами ЦП.
На Debian-е стоит Nginx (пробовал и с Apache2, ситуация такая же).
Nginx сконфигурирован на обратный прокси websocket-a(конфиг в конце), все работает прекрасно до момента пока ктото не зайдет с айфона, после чего система намертво зависает.
Виртуальная машина показывает что ЦП системы загружен на 25% тоесть 1 ядро(2,5GHz), память застывает в одном положении, сетевой битрейт - 0, система полностю мертвая.
Логов никаких практически нет ибо система не успевает среагировать...
Помогает только рестарт системы.

Что я пробовал сделать:
1. Подождать, вдруг оживет... нет, не оживает.
2. Попытатся отследить загрузку ЦП утилитой htop, ничего не видно, система умирает мгновенно и htop не успевает ничего показать.
3. Попытался утилитой htop распределить нагрузку процесов на ядра, тоесть процесы nginx повесил на 4 ядро а все остальные процессы на 1,2,3(пробовал несколько разных конфигураций)... нет, не помогает.

Интересный факт:
Если сертификат будет неправильный то в логах access.log не видно чтобы iphone ходил на /ws, а система не умирает.
Тоесть если сертификат неправильный то iPhone просит разрешение на подключение к незащищенному хосту, и после разрешения не устанавливает соединение с websocket-ом, а только прогружает веб странички, и система себе работает дальше.

Что мы имеем... Кто угодно с iPhone берет и убивает прокси сервер всместе со всей системой...

Конфигурация nginx:

upstream websocket { server 192.168.1.58:3636; } server { listen 443 ssl default_server; listen [::]:443 ssl default_server; root /var/www/html; client_max_body_size 50M; index index.html index.htm index.nginx-debian.html; server_name some.host.com; ssl_certificate /some_host_com_certificate.cert; ssl_certificate_key /some_host_com_key.key; location /ws { proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; proxy_set_header CLIENT_IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_read_timeout 86400; proxy_pass http://websocket; } }

Решение

Проблема решена добавлением следующих строк в конфигурацию вебсервера:

ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ECDHE-RSA-AES256-SHA384:AES256-SHA256:RC4:HIGH:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!AESGCM; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m;

frogour
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.