编辑更多信息

编辑更多信息

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

  • 手动启动时,一切正常。
  • 通过 systemctl 启动时,haproxy 无法找到它代理的服务,并以 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,并且使用了非常简单的配置:

# 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 用户以部署用户身份成功 curl 127.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。关闭防火墙不会改变任何事情。

答案1

问题在于 SELinux 仅允许 Web 服务器与有限的一组端口建立出站连接。

修复方式如下:

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

semanage安装后

yum install policycoreutils-python

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

答案2

我使用了centos 维基

回顾规则:

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

创建策略文件 ( *.pp)。

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

现在,在安装软件包时,我还包括该haproxy.pp文件并将其加载到 selinux 中

semodule -i haproxy.pp

相关内容