От: | AmSpb | ||
Дата: | 09.04.23 18:42 | ||
Оценка: |
ТЗ от компании | |
Введение В модуле mail, который предназначен для реверсивного проксирования почтовых протоколов, и модуле stream, предназначенном для проксирования произвольных TCP/UDP-сессий, есть поддержка PROXY Protocol v1 в сторону проксируемого сервера. Он представляет из себя специальный заголовок, который вставляется в начало передачи данных и позволяет передать через несколько проксирующих серверов информацию о клиентском соединении, в частности, IP-адрес клиента. У этого протокола есть две версии (v1 и v2), которые описаны в спецификации: http://www.haproxy.org/download/1.8/doc/proxy-protocol.txt В nginx в сторону проксируемого сервера в настоящий момент реализована только первая версия этого протокола. Включается с помощью директив: proxy_protocol — в stream: http://nginx.org/ru/docs/stream/ngx_stream_proxy_module.html#proxy_protocol — в mail: http://nginx.org/ru/docs/mail/ngx_mail_proxy_module.html#proxy_protocol Задачка Добавить поддержку второй версии протокола в модуль stream (реализация аналогичной настройки для модуля mail в рамках тестового задания не требуется). Одним из ключевых отличий второй версии протокола, кроме иного формата передачи данных, является также возможность дополнительно передавать произвольную информацию в т.н. TLV-векторах. Поэтому, кроме того, что потребуется добавить директиву proxy_protocol_version, позволяющую задать используемую версию протокола: proxy_protocol_version 1; или proxy_protocol_version 2; Необходимо также дать возможность задавать TLV-векторы, например: proxy_protocol_tlv alpn "http/2"; proxy_protocol_tlv 0x31 $msec; proxy_protocol_tlv ssl_cn $proxy_protocol_tlv_ssl_cn; proxy_protocol_tlv ssl_0x26 $proxy_protocol_tlv_ssl_0x26; Тут первым параметром задается тип TLV, аналогично тому, как это реализовано для переменных $proxy_protocol_tlv_*. А вторым параметром устанавливается значение, которое будет передано. Второй параметр должен поддерживать переменные. В качестве результата ожидается один или несколько патчей в формате unified diff поверх исходников nginx версии 1.23.2, которые доступны в репозитории Mercurial: — https://hg.nginx.org/nginx/ И зеркале на GitHub: — https://github.com/nginx/nginx Безусловным успехом будет считаться работающая реализация, которая успешно пройдет ревью. Высоко ценится чистота патча (ничего лишнего не затронуто без необходимости), аккуратность, кропотливость и выдержанность в едином стиле с кодом вокруг. Основной способ соблюдение стиля — это подражание окружающему коду, поиск похожих конструкций. Кроме того, некое общее представление о стиле и части правил можно получить по ссылке: — http://nginx.org/en/docs/dev/development_guide.html#code_style Первым делом хочется услышать обратную связь — как оцениваете задачу и если готовы взяться, то через какое время рассчитываете вернуться к нам с первым результатом, разумеется с учетом доступного свободного времени. | |
оно не лайтовое-скажу сразу
скорее, ожидания
а не требования