У меня есть 3 веб-сервера nodejs, развернутых на ящике ubuntu, и HAproxy для балансировки нагрузки этих серверов на одном ящике. HAproxy прослушивает порт 80 (http) и 443 (https, с завершением SSL). Между сервером HAproxy и веб-серверами нет SSL.
Вызов POST к одному из api без SSL проходит с любым значением длины содержимого, но когда я пытаюсь выполнить вызов POST с длиной содержимого больше 8055 на HAproxy с SSL-соединением (порт 443), время HAproxy выдача ошибки 504 Gateway Timeout.
Кроме того, если я даю заголовок «Expect: 100 continue» команде curl, сервер отвечает с некоторой задержкой, которой я не хочу существовать. Вот как выглядит конфигурационный файл HAproxy:
global
stats socket /var/run/haproxy.sock mode 0777
log 127.0.0.1 local0 info
log 127.0.0.1 local1 info
chroot /usr/share/haproxy
uid nobody
gid nobody
nbproc 1
daemon
maxconn 50000
frontend localnodes:https
bind *:443 ssl crt /etc/ssl/private/443_private_ssl_in.pem no-sslv3
mode http
reqadd X-Forwarded-Proto:\ https
default_backend nodes
timeout client 30000
frontend localnodes-http
bind *:80
mode http
reqadd X-Forwarded-Proto:\ http
default_backend nodes
timeout client 30000
backend nodes
mode http
balance roundrobin
option forwardfor
http-request set-header X-Forwarded-Port %[dst_port]
http-request add-header X-Forwarded-Proto https if { ssl_fc }
option httpchk HEAD / HTTP/1.1\r\nHost:localhost
log global
timeout connect 3000
timeout server 30000
option httplog
option ssl-hello-chk
option httpchk GET /
http-check expect status 404
server nodejsweb01 127.0.0.1:8000 check
server nodejsweb02 127.0.0.1:8001 check
server nodejsweb03 127.0.0.1:8002 check
Я удостоверился, что веб-серверы nodejs позади не имеют проблем, они работают нормально. Я попытался увеличить период тайм-аута сервера, но безрезультатно. Также попробовал решение по этой ссылке, который сообщает, что нужно передать параметр ssl ca-file внутренним узлам, как показано ниже:
server nodejsweb01 127.0.0.1:8000 ssl ca-file /etc/ssl/certs/ca.pem check
server nodejsweb02 127.0.0.1:8001 ssl ca-file /etc/ssl/certs/ca.pem check
server nodejsweb03 127.0.0.1:8002 ssl ca-file /etc/ssl/certs/ca.pem check
но после этой опции HAproxy выдает ошибку, говоря, что серверы недоступны на бэкэнде.
Пожалуйста, скажите мне, что я делаю не так в файле конфигурации HAproxy, чтобы я заставил веб-серверы успешно отвечать через SSL-соединение
frontend/bind/mode http/default_backend
,backend/mode http/httplog/httpchk/server
- person Ianthe the Duke of Nukem   schedule 06.05.2016