Mod_voc для обновление модуля
Так как NGINX написан на чистом C, а модуль mod_voc (ngx_http_voc_module.c) написан в далеком 2006 году, то конечно он давно устарел. На сайте Voodoo, уже даже для скачивания не доступен. Поскольку суровые программеры на C такой ерундой как чаты не занимаются, то в интернете, такую экзотику как mod_voc для Nginx актуальной версии не найти вообще. Последний ngx_http_voc_module.c поддерживал версию NGINX 1.9.10 от 26.01.2016. С последующими версиями не работал.
Пришлось переделывать все самому.
Сейчас все работает на последней на сегодняшний день версии nginx-1.23.3. посмотреть демо-чат.
Немного ликбеза, о том что делает этот модуль -
принимает соединение от клиента
- передает это соединение (системный сокет) демону
- забывает про это соединение и возвращается к нормальной работе (готов обслуживать следующие запросы).
Т.е. дополнительные затраты, которые мы получаем -- обработка запроса вебсервером (нужно посмотреть УРЛ, если он "к демону" -- тогда передаем сокет, если нет -- обрабатываем сами).
Фактически -- никакой разницы в загрузке сервера не заметно.
Из сегодняшних проблем,
- После обновления до версии 1.9.11. NGINX стал поддерживать динамическое подключение сторонних модулей, соответственно стандартными методами mod_voc не подключается, изменилась установка.
- В новых версиях операционных систем, используются временные каталоги с пространством имен , что означает, что каждый сервис видит совершенно разные файлы /tmp и может видеть только свои собственные файлы в этом каталоге. Обнаружить эту проблему ой как не просто, потому что каждая учетная запись может видеть папку и файл в tmp (например установите chmod 777 для проверки), и ни за что не догадаешься что процессы увидеть сокет не могут. Как выход переместить сокет в другой каталог, например /run (ранее известный как /var/run). Если /run/ недоступен для записи напрямую для обычного пользователя, курите этот мануал
- Ну и сам модуль, не компилируется на последних версиях gcc, стало быть внесены изменения для работоспособности.
Выкладываю работоспособный модуль. Мануал по установке в следующей статье.
Работоспособность проверена на Fedora 37, CentOS 7, Debian GNU/Linux 11.