Конфигурация обратного прокси HAProxy

Aug 18 2020

Я хочу перенести некоторые сайты на новый сервер. Для внесения всех изменений DNS требуется пара дней, поэтому я хотел настроить обратный прокси-сервер HAProxy для перенаправления всего трафика из старого местоположения в новое. Я не очень разбираюсь в таком конфиге. При посещении домена я получаю сообщение об ошибке:

503 Service Unavailable No server is available to handle this request.

Это конфигурация, которую я использовал (со скрытым IP-адресом):

global

  log         127.0.0.1 local2

    chroot  /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group   haproxy
    daemon

    # turn on stats unix socket
    stats socket /var/lib/haproxy/stats

defaults
    mode                    http
    log                     global
    option                  httplog
    option                  dontlognull
    option http-server-close
    option forwardfor       except 127.0.0.0/8
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 3000

frontend localhost
   bind *:80
   bind *:443 ssl crt /etc/pki/tls/certs/haproxy.pem
   redirect scheme https if !{ ssl_fc }
   mode http
   default_backend node

backend node
    mode http
    option forwardfor
    option httpchk HEAD / HTTP/1.1\r\nHost:localhost
    server dcnode1 x.x.x.x:80 check
    http-request set-header X-Forwarded-Port %[dst_port]
    http-request add-header X-Forwarded-Proto https if { ssl_fc }

Ответы

tater Aug 18 2020 at 20:56

Эта ошибка означает, что серверная часть не считается «работающей».

Сначала убедитесь, что внутренний сервер запущен и доступен с машины HAProxy, например, telnet x.x.x.x 80и убедитесь, что он подключается.

Если вы можете успешно установить соединение, второе, что нужно проверить, - это не проходит ли проверка серверной частью. Попробуйте удалить option httpchk, и удалите checkиз serverстроки. (Когда у вас только один внутренний сервер, проверка не имеет большого значения, но вы всегда можете добавить ее позже)

Возможно, вы Host: localhostвозвращаете в чеке что-то необычное.