Skip to content

Latest commit

 

History

History
57 lines (39 loc) · 7.06 KB

haproxy-configuration.md

File metadata and controls

57 lines (39 loc) · 7.06 KB

Настройки HAProxy ноды и редактор конфига

Настройки ноды

Диалог настроек ноды (шестерёнка), строка под переключателем «Логи соединений HAProxy»:

Поле Директива HAProxy По умолчанию
maxconn global maxconn автоматически (HAProxy)
nbthread global nbthread автоматически (HAProxy)
timeout connect defaults timeout connect 5s
timeout client defaults timeout client 15m
timeout server defaults timeout server 15m

Пустое поле — значение по умолчанию. Настройки действуют на все маршруты ноды: изменение публикует новую ревизию в той же транзакции, Agent применяет её reload без разрыва соединений. Обновлять Agent не нужно.

Настройки HAProxy ноды

API: metadata.haproxy_settings в POST/PUT /api/v1/nodes (maxconn, nbthread, timeout_connect, timeout_client, timeout_server). Если ключ не передан — сохранённое значение не меняется, {} сбрасывает. Неизвестные поля, дробные и вне диапазона числа, неверные длительности → 400. Назначенный ручной конфиг настройки не меняют.

Редактор конфигурации

Кнопка «Конфигурация HAProxy» на странице ноды открывает /nodes/:id/haproxy — haproxy.cfg ноды целиком.

  • Monaco (поставляется с Panel, грузится только на этой странице): подсветка HAProxy, миникарта, автодополнение.
  • Подсказки на русском при наведении: секции, ~120 директив, параметры server/bind, balance, fetch-функции. Опасные места подсвечиваются предупреждением.
  • Имена nf_be_*/nf_srv_* помечены «не переименовывать»: по ним Panel считает статистику и применяет квоты.
  • Строка состояния: время последней проверки и «Конфиг валиден» или «N ошибок, M предупреждений» (клик — к первой проблеме), порты прослушивания из строк bind.

Редактор haproxy.cfg с подсказкой по директиве

Кнопки:

Кнопка Действие
Сохранить (Ctrl+S) Новая ревизия без применения.
Всё равно сохранить Только при ошибках линтера: сохранение с force.
Форматировать Выравнивает отступы.
Применить на ноду Сохраняет и назначает ревизию. Перед применением — diff с применённым конфигом; при ошибках линтера — дополнительное подтверждение.
История Прежние ревизии ноды.
Загрузить из маршрутов Подставляет конфиг, собранный из текущих маршрутов и настроек.
Вернуться к сборке из UI POST /api/v1/nodes/{id}/generated-config: собирает конфиг из маршрутов и назначает его в одной транзакции.

Пока назначен ручной конфиг, изменения маршрутов, требующие публикации, возвращают 409 advanced_config_active и откатываются. Ручные ревизии остаются в истории.

Разбор ручного текста обратно в формы маршрутов не выполняется. Квоты, статистика и план файрвола строятся по маршрутам; добавленные вручную listeners/backends этих функций не получают. Сертификаты и файлы, на которые ссылается конфиг, должны уже быть на ноде. Лимит — 512 КиБ. Не храните закрытые ключи в тексте конфига.

Проверка

  1. Линтер в браузере — на каждое изменение.
  2. POST /api/v1/nodes/{id}/config-lint — через 250 мс после изменения. Статическая проверка (в образе Panel нет haproxy), ключевые слова сверены с исходниками HAProxy 2.8, 3.0 и 3.2: неизвестные секции, директивы, option, параметры server/bind, виды timeout; директива не в той секции; лишние ,/; (option tcplog, — ошибка на запятой); повторяющиеся имена proxy и серверов; use_backend/default_backend на несуществующий backend; неверные порты, адреса, длительности, значения mode/balance/hash-type/log; несбалансированные .if/.endif; размер больше 512 КиБ.
  3. Сохранение (POST /api/v1/nodes/{id}/config-revisions, metadata.source=advanced_editor) повторяет проверку: с ошибками — 422 config_lint_failed со списком issues, "force": true сохраняет всё равно. В ревизии хранятся renderer=manual, listener_tcp_ports, lint: {errors, warnings}. Заголовок # Generated by NodeFlow. Do not edit. заменяется на # Edited manually in NodeFlow advanced editor., в конец добавляется перевод строки.
  4. haproxy -c на ноде перед применением — окончательная проверка. При ошибке Agent 2.1.0 передаёт строки [ALERT]/[WARNING] (без строк с password/secret, до 1500 байт); они доступны в GET /api/v1/nodes/{id}/config-state → last_error_detail и показываются в редакторе со ссылками на строки. Старые Agent сообщают только validation_failed.

План файрвола ручной ревизии берёт порты из listener_tcp_ports. Для ручных ревизий, сохранённых до 2.1.0 без этого поля, текущие открытые порты сохраняются.

Формат ответов — docs/api-contract.md, раздел «Advanced editor: lint and manual revisions».