Со стороны Nginx websocket — дополнительные заголовки при проксировании. Ниже приведен пример конфигурационного файла Nginx для приложения на NodeJS, использующего вебсокеты.
Конфигурация Nginx websocket
Конфигурационные файлы добавляются обычно в каталог /etc/nginx/sites-enabled/ на сервере.
Может быть и другой путь, всё зависит от настроек сервиса, которые задаются в /etc/nginx/nginx.conf.
В основном файле с настройками определяются каталоги из которых сервис считывает конфигурацию. Читайте подробнее про структуру и используемые Nginx контексты.
server
{
listen *:80;
server_name sitename.com www.sitename.com;
location / {
root /home/web/;
try_files $uri @nodejs;
}
location @nodejs {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
include /etc/nginx/proxy_http_headers.conf;
proxy_cache_bypass $http_upgrade;
proxy_read_timeout 300s;
}
}
В файле задается корневой каталог сайта, имя сайта с синонимами.
Устанавливается перенаправление запросов в location @nodejs. В нем указан локальный порт 3000. На порту запускается приложение, которое обслуживает запросы.
Также устанавливаются через proxy_set_header необходимые для работы веб-сокетов заголовки, они обеспечивают поддержку технологии со стороны веб-сервера.
После внесения изменений нужно перезапустить веб-сервер.
Как проверить работу веб-сокетов
В режиме разработчика браузера Firefox (он открывается при нажатии F12 на клавиатуре) можно посмотреть запросы, которые происходят по протоколу Websocket. Чтобы видеть только их можно отметить значение фильтра WS.
В случае если запросы не проходят в консоли будут ошибки с кодом 500 или другие ошибки.
Подробное описание протокола и принципов обработки запросов можно найти в документации mozilla.
Чаще всего технология Websocket используется в приложениях на nodejs.
Читайте о том как запустить проект на nodejs на Linux сервере и настроить его стабильную работу в production.
Материал можно использовать как руководство по настройке, несколько строк из настоящей статьи позволит добавить для приложения поддержку websocket в Nginx.