Yggdrasil поддерживает соединения с пирами по протоколу websocket.
Трафик Yggdrasil по Websocket внутри HTTPS будет практически неотличим от обычного трафика HTTPS. Однако, будут накладные расходы на второй уровень шифрования.
Настраивать пиринг таким образом, вероятно, имеет смысл, когда у вас есть работающий сайт.
Ниже будут приведены конфигурационные файлы, которые можно использовать при настройке пиринга по wss.
Имеем: сайт в интернете, домен, сертификаты SSL.
Это не обязательно, соединяться можно просто по IP-адресу, на котором больше ничего нет, и даже сертификат SSL можно получить на IP-адрес - всё зависит от целей, с которыми вы настраиваете пиринг через веб-сокеты…
В конфигурации 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;
}
...
Listen: [
ws://127.0.0.1:8011
]
...
...
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
