В nginx довольно просто настроить прокси для unix .sock
файлы
Например:
upstream bla {
server unix:///home/sam/Source/bla/tmp/sockets/thin1.sock;
server unix:///home/sam/Source/bla/tmp/sockets/thin2.sock;
}
Есть ли в haProxy аналогичный синтаксис для включения балансировки локальных .sock
файл
Короткий ответ: Да, начиная с версии 1.5.
Давайте посмотрим на сервер Документация по аргументам ключевых слов:
<address> is the IPv4 or IPv6 address of the server. Alternatively, a
resolvable hostname is supported, but this name will be resolved
during start-up. Address "0.0.0.0" or "*" has a special meaning.
It indicates that the connection will be forwarded to the same IP
address as the one from the client connection. This is useful in
transparent proxy architectures where the client's connection is
intercepted and haproxy must forward to the original destination
address. This is more or less what the "transparent" keyword does
except that with a server it's possible to limit concurrency and
to report statistics. Optionally, an address family prefix may be
used before the address to force the family regardless of the
address format, which can be useful to specify a path to a unix
socket with no slash ('/'). Currently supported prefixes are :
- 'ipv4@' -> address is always IPv4
- 'ipv6@' -> address is always IPv6
- 'unix@' -> address is a path to a local unix socket
- 'abns@' -> address is in abstract namespace (Linux only)
Any part of the address string may reference any number of
environment variables by preceding their name with a dollar
sign ('$') and optionally enclosing them with braces ('{}'),
similarly to what is done in Bourne shell.
Таким образом, вы можете указать путь к сокету unix с ведущей косой чертой или явно добавить префикс семейства адресов:
server nginx1 /run/nginx/default.sock
server nginx2 unix@default.sock
Как сказал Quanta, ему нужен IPv4-адрес, но с использованием сокат чтобы передать сокет unix в TCP, возможно, вы можете использовать для этого HAProxy.
socat TCP-LISTEN:1234,reuseaddr,fork UNIX-CLIENT:/tmp/foo
AFAIK, HAProxy его не поддерживает. Согласно документ, вы должны указать IPv4 или IPv6 (или имя хоста) сервера.