在CentOS 7上与systemctl和Haproxy发生奇怪的交互

通过systemctl运行haproxy与手动运行haproxy不同

  • 手动启动,一切正常。
  • 从systemctl开始,haproxy无法find它所代理的服务,并用503来回答。

这是通过systemctl启动时的输出:

> sudo systemctl status -l haproxy.service haproxy.service - HAProxy Load Balancer Loaded: loaded (/usr/lib/systemd/system/haproxy.service; enabled) Active: active (running) since Wed 2014-12-24 08:08:49 EST; 4min 59s ago Main PID: 20307 (haproxy) CGroup: /system.slice/haproxy.service └─20307 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid Dec 24 08:08:49 localhost.localdomain systemd[1]: Starting HAProxy Load Balancer... Dec 24 08:08:49 localhost.localdomain systemd[1]: Started HAProxy Load Balancer. 

像这样,haproxy只是说503我的后端。

如果我现在停止haproxy服务,而是在命令行上手动运行它,如下所示:

 sudo /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid 

它代理罚款给我的服务器。

我已经通过yum安装了haproxy,并且使用了非常简单的configuration:

 # defaults above frontend main *:80 default_backend app backend app option httpclose option forwardfor server web1 127.0.0.1:8001 

任何想法有什么区别可能是? 我试过运行它都守护进程,而不是。

这是使用systemctl运行时的日志:

 Proxy app started. 127.0.0.1:44391 [24/Dec/2014:09:01:42.403] main app/web1 0/0/-1/-1/0 503 212 - - SC-- 0/0/0/0/3 0/0 "GET / HTTP/1.1" 

这是手动运行时的日志:

 Proxy app started. 127.0.0.1:44393 [24/Dec/2014:09:02:11.758] main app/web1 0/0/0/2/2 200 5699 - - ---- 1/1/0/0/0 0/0 "GET / HTTP/1.1" 

为了清楚起见,我可以使用sudo和haproxy用户作为我的部署用户成功curl127.0.0.1:8001。

编辑更多的信息

我尝试使用nginx作为代理,而无济于事。 所以这里不是haproxy。 nginx说502 Bad Gateway ,日志说:

 2014/12/24 16:57:04 [crit] 23214#0: *1 connect() to 127.0.0.1:8001 failed (13: Permission denied) while connecting to upstream, client: 192.168.34.1, server: www.zombieclj.local, request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:8001/", host: "www.zombieclj.local" 

所以是的,有一些安全事情正在进行。 我仍然能够curl到127.0.0.1:8001。 停止防火墙不会改变任何东西。

问题是SELinux只允许Web服务器进行到有限的一组端口的出站连接。

通过这样做来修复

 semanage port --add --type http_port_t --proto tcp 8001 

安装semanage

 yum install policycoreutils-python 

Nodejs Nginx错误:(13:权限被拒绝),当连接到上游

我使用了centos wiki上的Audit2Allow函数

查看规则:

grep haproxy /var/log/audit/audit.log | audit2allow -m haproxy

创build一个策略文件( *.pp )。

grep haproxy /var/log/audit/audit.log | audit2allow -M haproxy

现在在安装包的时候,我还包含了haproxy.pp文件,并将其加载到selinux中

semodule -i haproxy.pp