Запуск haproxy через systemctl отличается от запуска вручную.
Вот результат при запуске через 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
это нормально прокси к моему серверу.
Я установил haproxy через yum и использую исключительно простую конфигурацию:
# 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"
Чтобы было ясно, я могу успешно скрутить 127.0.0.1:8001 как мой пользователь развертывания, с sudo и пользователем haproxy.
Вместо этого я попытался использовать 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"
Так что да, кое-что происходит с безопасностью. Я все еще могу свернуть до 127.0.0.1:8001. Остановка брандмауэра ничего не меняет.
Проблема заключалась в том, что SELinux позволял веб-серверу устанавливать исходящие подключения только к ограниченному набору портов.
Исправлено:
semanage port --add --type http_port_t --proto tcp 8001
после установки semanage
с участием
yum install policycoreutils-python
Ошибка Nodejs Nginx: (13: в доступе отказано) при подключении к восходящему потоку
Я использовал функцию Audit2Allow, найденную на 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