Проксирование WebSockets при помощи Nginx

HELP-ME-24.COM (Freelance Team), Черноусов Антон

В процессе переноса нашей небольшой фермы виртуализации в "продакшн", я столкнулся с небольшой особенностью реализации консоли удаленного доступа в WebVirtManager, а именно в пробросе протокола WebSocket к машине в интранет.

Реализация удаленного доступа к консоли KVM уже описывалась в статье "Организация доступа к консоли виртуальной машины KVM через web-интерфейс" и в этом случае для доступа к консоли виртуальных машин используется WebSocket обмен на порту 6080. Технически эту проблему можно было обойти банальным пробросом порта при помощи Socat или iptables, но как оказалось в Nginx уже давно реализован механизм проброса Websocket.

Конфигурация для проксирования websocket и преобразования его в HTTPS выглядит следующим образом:

server {
listen 6080 ssl;
ssl_certificate /etc/letsencrypt/live/vcenter.help-me-24.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/vcenter.help-me-24.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot

server_name vcenter.help-me-24.com;

access_log /var/log/nginx/web-socket-vcenter.help-me-24.com.log;
error_log /var/log/nginx/web-socket-vcenter.help-me-24.com-error.log;

include /etc/nginx/block_list.dat;
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains;";

location / {
proxy_pass http://10.253.0.11:6080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}

Оставьте комментарий

Вы должны быть вошедший в чтобы отправить комментарий