В моем файле haproxy.cfg есть два внутренних сервера, использующих имена хостов:
server ops-ca-revealv2e-prod-1 ops-ca-revealv2e-prod-1:443 cookie ops-ca-revealv2e-prod-1 ssl weight 1 maxconn 512 check
server ops-ca-revealv2e-prod-2 ops-ca-revealv2e-prod-2:443 cookie ops-ca-revealv2e-prod-2 ssl weight 1 maxconn 512 check
Эти имена хостов являются частью Amazon OpsWorks и автоматически вставляются в / etc / hosts при каждом включении или отключении инстанса. Если я попытаюсь перезапустить HAProxy, когда один из экземпляров не работает, я получаю сообщение об ошибке:
[ALERT] 362/225440 (27202) : parsing [/opt/haproxy-ssl/haproxy.cfg:42] : 'server ops-ca-revealv2e-prod-2' : invalid address: 'ops-ca-revealv2e-prod-2' in 'ops-ca-revealv2e-prod-2:443'
[ALERT] 362/225440 (27202) : Error(s) found in configuration file : /opt/haproxy-ssl/haproxy.cfg
[ALERT] 362/225440 (27202) : Fatal errors found in configuration.
Есть ли способ сообщить HAProxy, чтобы он проверял правильность имени хоста? Если он действителен, используйте его, если нет, игнорируйте.
В haproxy> = 1.7 вы сможете использовать init-addr
параметр, указав none, чтобы предотвратить разрешение DNS при запуске.
Из документы:
init-addr {last | libc | none | <ip>},[...]*
Укажите, в каком порядке следует разрешить адрес сервера при запуске, если он использует полное доменное имя. Предпринимаются попытки разрешить адрес, применяя по очереди каждый из методов, упомянутых в списке, разделенном запятыми. Используется первый успешный метод. Если до конца списка не найден рабочий метод, выдается ошибка. Метод «последний» предлагает выбрать адрес, который появляется в файле состояний (см. «Файл-состояния-сервера»). Метод «libc» использует внутренний преобразователь libc (gethostbyname () или getaddrinfo () в зависимости от операционной системы и параметров сборки). Метод «none» конкретно указывает, что сервер должен запускаться без действительного IP-адреса в неактивном состоянии. Может быть полезно игнорировать некоторые проблемы с DNS при запуске, ожидая исправления ситуации позже. Наконец, может быть предоставлен IP-адрес (IPv4 или IPv6).
Итак, ваша строка конфигурации может быть:
server s1 myhostname init-addr none
Нет, это невозможно изнутри haproxy.
Согласно инструкции, address
в server
строка конфигурации
[...] IPv4 или IPv6-адрес сервера. В качестве альтернативы поддерживается разрешаемое имя хоста [...]
другими словами, нельзя использовать неразрешимые имена хостов в конфигурации.
Идея:
Любая часть адресной строки может ссылаться на любое количество переменных среды, поставив перед их именем знак доллара ('$') и, при необходимости, заключив их в фигурные скобки ('{}'), аналогично тому, как это делается в оболочке Bourne.