503与清漆HAproxy

我们在不同的应用服务器上托pipe多个应用。 我们有什么

HAProxy – >应用程序服务器

应用程序服务器可以是Apache上的PHP或Glassfish中的Java应用程序。 因此,我们使用haproxy将1个IP和1个端口展示给互联网,然后对各个应用服务器进行负载均衡,每个项目获得两个应用服务器,并且这两个应用服务器相互平衡。

我们现在要做的是,把HAProxy的Varnishcaching所有的stream量,并返回它,然后它击中HAproxy并得到路由到任何应用服务器。

问题是我得到一个从清漆到haproxy 503,但如果我直接清漆的应用服务器之一,它完美的作品。 有人有主意吗?

我有一个类似的问题 ,不久之前 – 原因竟然是SELinux。

如果HAProxy运行在特权端口(低于1024),但您的应用程序服务器运行在更高的非特权端口上,则以下情况非常合理。

某些设置(例如默认的CentOS)的SELinuxconfiguration将防止Varnish连接到特权端口。 如果您已经运行审计,则可以在审计日志中validation这一点。

例如,在干净安装的CentOS 6.2上(当我的后端服务器在端口81上运行时):

grep varnish /var/log/audit/audit.log

 type=AVC msg=audit(1331500393.450:25): avc: denied { name_connect } for pid=1276 comm="varnishd" dest=81 scontext=unconfined_u:system_r:varnishd_t:s0 tcontext=system_u:object_r:reserved_port_t:s0 tclass=tcp_socket 

SELinux执行的当前状态可以通过以下方式确定:

 cat /selinux/enforce 

(其中1是强制执行的, 0是宽松的)。

如果上述问题似乎是您的问题,请将SELinux设置为暂时允许并确认:

 echo 0 >/selinux/enforce 

如果您确认事实上是您的问题,则可以使用audit2allow -a -w (CentOS上的policycoreutils-python软件包的一部分)来分析您的审计日志并生成必要的规则,或者可以尝试以下操作:

 setsebool -P varnishd_connect_any 1