API управления nginx 1.31.5 преобразует неудачную перезагрузку в HTTP 422 вместо строки в журнале
В Nginx версии 1.31.5 появился новый API управления, доступный через Unix-сокет или TCP-порт. Этот API позволяет выполнять перезагрузки на основе HTTP и предоставляет структурированные ответы, в отличие от традиционного метода перезагрузки на основе сигналов. Его можно включить с помощью флага командной строки, а официальный образ Docker включает необходимую компиляцию. Дерево конечных точек API можно обнаружить, выполняя последовательные GET-запросы. Ключевые конечные точки включают /1/control/processes для получения PID рабочих процессов и /1/control/config для получения текущей конфигурации. PATCH-запрос к /1/control/config инициирует перезагрузку конфигурации путем повторного чтения файла конфигурации с диска. Этот API предоставляет значительное преимущество, возвращая парсируемое JSON-сообщение об ошибке в случае неудачной перезагрузки, в отличие от менее информативного метода сигналов. Несмотря на первоначальные предположения, процесс перезагрузки API не демонстрирует явного превосходства в скорости по сравнению с методом сигналов. Тестирование параллелизма показало, что текущие запросы не затрагиваются перезагрузками, независимо от используемого метода. API управления несет значительные риски безопасности при привязке к сетевому порту, поскольку он не имеет встроенной аутентификации и может быть использован кем угодно, имеющим доступ к сети. Привязка сокета к Unix-сокету со строгими правами доступа к файлам является рекомендуемым способом смягчения последствий, эффективно блокируя непривилегированных пользователей. Включение сокета управления влечет за собой небольшие накладные расходы на память для основного процесса. Тестирование показало, что редактирование файлов на стороне хоста для смонтированных файлов конфигурации может не распространяться на работающие контейнеры, требуя таких методов, как docker cp, для немедленного обновления. Основное преимущество API управления заключается в его превосходном сообщении об ошибках во время перезагрузок, что делает его ценным для скриптов развертывания. Настоятельно рекомендуется привязывать сокет управления только к Unix-сокету с соответствующими правами доступа. Администраторы должны проверять системы на наличие сетевых сокетов управления в версиях Nginx 1.31.5 и новее.
/1/control/processesдля получения PID рабочих процессов и/1/control/configдля получения текущей конфигурации. PATCH-запрос к/1/control/configинициирует перезагрузку конфигурации путем повторного чтения файла конфигурации с диска. Этот API предоставляет значительное преимущество, возвращая парсируемое JSON-сообщение об ошибке в случае неудачной перезагрузки, в отличие от менее информативного метода сигналов. Несмотря на первоначальные предположения, процесс перезагрузки API не демонстрирует явного превосходства в скорости по сравнению с методом сигналов. Тестирование параллелизма показало, что текущие запросы не затрагиваются перезагрузками, независимо от используемого метода. API управления несет значительные риски безопасности при привязке к сетевому порту, поскольку он не имеет встроенной аутентификации и может быть использован кем угодно, имеющим доступ к сети. Привязка сокета к Unix-сокету со строгими правами доступа к файлам является рекомендуемым способом смягчения последствий, эффективно блокируя непривилегированных пользователей. Включение сокета управления влечет за собой небольшие накладные расходы на память для основного процесса. Тестирование показало, что редактирование файлов на стороне хоста для смонтированных файлов конфигурации может не распространяться на работающие контейнеры, требуя таких методов, какdocker cp, для немедленного обновления. Основное преимущество API управления заключается в его превосходном сообщении об ошибках во время перезагрузок, что делает его ценным для скриптов развертывания. Настоятельно рекомендуется привязывать сокет управления только к Unix-сокету с соответствующими правами доступа. Администраторы должны проверять системы на наличие сетевых сокетов управления в версиях Nginx 1.31.5 и новее.