Назад | Перейти на главную страницу

Странное взаимодействие systemctl с Haproxy на CentOS 7

Запуск 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