haproxy可以用来平衡unix套接字吗?

在nginx中,configuration它来代理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 filew

简短的回答: 是的,从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套接字的path,或者显式地加上地址族前缀:

 server nginx1 /run/nginx/default.sock server nginx2 [email protected] 

AFAIK,HAProxy不支持它。 根据该文档 ,您必须指定服务器的IPv4或IPv6(或主机名)。

Quanta说它需要IPv4地址,但是使用socat将unix scoket转发给TCP,也许你可以使用HAProxy。

 socat TCP-LISTEN:1234,reuseaddr,fork UNIX-CLIENT:/tmp/foo