====== Пиринг через websocket ====== [[yggdrasil:yggdrasil]] поддерживает соединения с пирами по протоколу [[wpru>WebSocket|websocket]]. Трафик Yggdrasil по Websocket внутри HTTPS будет практически неотличим от обычного трафика HTTPS. Однако, будут накладные расходы на второй уровень шифрования. Настраивать пиринг таким образом, вероятно, имеет смысл, когда у вас есть работающий сайт. Ниже будут приведены конфигурационные файлы, которые можно использовать при настройке пиринга по ''%%wss%%''. ===== Исходные данные ===== Имеем: сайт в интернете, домен, сертификаты SSL. Это не обязательно, соединяться можно просто по IP-адресу, на котором больше ничего нет, и даже сертификат SSL можно получить на IP-адрес - всё зависит от целей, с которыми вы настраиваете пиринг через веб-сокеты... ===== Конфигурация на стороне сервера ===== ==== nginx ==== В конфигурации nginx должна быть включена поддержка SSL: http { ... ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; ... } Пример конфигурации простого сайта и reverse proxy на websocket Yggdrasil: # не даём доступ по IP, только по доменному имени server { listen 1.2.3.4:80 default_server; server_name ""; return 444; } server { listen 1.2.3.4:443 ssl default_server; server_name ""; ssl_certificate /etc/ssl/certs/mycoolsite.com.crt; ssl_certificate_key /etc/ssl/private/mycoolsite.com.key; return 444; } # с http перенаправляем на https server { listen 1.2.3.4:80; server_name mycoolsite.com www.mycoolsite.com; return 301 https://$host$request_uri; } # основная конфигурация для доступа по доменному имени server { listen 1.2.3.4:443 ssl http2; server_name mycoolsite.com www.mycoolsite.com; ssl_certificate /etc/ssl/certs/mycoolsite.com.crt; ssl_certificate_key /etc/ssl/private/mycoolsite.com.key; autoindex off; root /var/www/mycoolsite; index index.html; #здесь описывается локация сервиса с вэб-сокетом location /ws/ { proxy_cache off; 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; proxy_buffering off; proxy_read_timeout 86400; proxy_send_timeout 86400; proxy_set_header Origin ""; proxy_pass http://127.0.0.1:8011; # yggdrasil будет слушать на 127.0.0.1:8011 } } # доступ к сайту по IP-адресу yggdrasil server { listen [201:201a:201b:201c:201d:201e:201f:2010]:80 default_server; autoindex off; root /var/www/mycoolsite; index index.html; gzip on; gzip_types text/plain text/xml text/css text/javascript application/xml application/javascript application/x-javascript application/json; gzip_min_length 256; gzip_comp_level 9; gzip_static on; } ==== Yggdrasil на сервере ==== ... Listen: [ ws://127.0.0.1:8011 ] ... ===== Клиент (Yggdrasil) ===== ... Peers: [ wss://mycoolsite.com:443/ws ] ... Собственно, на этом всё. Перезапустив nginx и Yggdrasil на сервере и Yggdrasil на клиенте (клиент/сервер - имеются ввиду клиент и сервер websocket), получим соединение двух пиров по websocket внутри HTTPS. ===== Дополнительно ===== С помощью параметра запроса URI ''%%?origin=%%'' можно задать HTTP-заголовок ''%%Origin%%'' для последующей обработки его web-сервером. Параметр ''%%origin%%'' добавлен в версии: 0.5.14-RC.1. ====== Ссылки ====== Лаконичная документация от разработчиков Yggdrasil (EN): https://yggdrasil-network.github.io/configurationref.html#peers \\ ~~DISCUSSION~~