How to install and configure HAProxy on CentOS 7
In this tutorial we gonna show how to install and configure HAProxy on CentOS 7.
HAProxy is an open source TCP/HTTP load balancer, proxy server and SSL/TLS terminator with high performance and reliability for web sites that have high volume of traffics.
In this guide we want to implement HAProxy as a load balancer for 2 Nginx web servers. So here is our environment:
OS: CentOS 7 on VMware
Firewall: firewalld
SElinux: enforcing
HAProxy Public IP address: 192.168.147.132
HAProxy Private IP address: 192.168.17.128
Web server 1 IP address: 192.168.17.130
Web server 1 IP address: 192.168.17.131
Client: Windows 10
Client IP Address: 192.168.147.129
1- Install Nginx
Refer to this guide to know How to install Nginx web server on CentOS 7 Linux
2- Install and configure HAProxy
to install HAProxy we simply do it through repository:
# yum install haproxy
then we start and enable HAProxy service:
# systemctl start haproxy # systemctl enable haproxy # systemctl status haproxy
3- Configure SELinux
to allow HAProxy access to port 5002 when SELinux is enabled we should modify SELinux policies. so issue the following commnads:
# grep haproxy /var/log/audit/audit.log | audit2allow -M mypol # semodule -i mypol.pp
4- Configure HAProxy
Now it’s time to configure HAProxy. related configuration file is located in /etc/haproxy/haproxy.cfg. so we open it with Vim:
# vim /etc/haproxy/haproxy.cfg
The configuration file is divided into four major sections.
global settings – sets process-wide parameters.
defaults – this section sets default parameters for all other sections following its declaration.
frontend – this section describes a set of listening sockets accepting client connections.
Backend – this section describes a set of servers to which the proxy will connect to forward incoming connections.
To understand the options under global settings and defaults, read the HAProxy documentation. Here we will use the defaults.
First we configure logging because when HAProxy being implemented, it plays a significant role and we need to know how things go exactly.
so we achieve this by reading HAProxy logs.
Default configuration for logging is:
log 127.0.0.1 local2
and it tells us to use syslog facility for logging. so we should tell syslog server how to receive and process HAProxy logs.
so do it as follow:
# vim /etc/rsyslog.d/haproxy.conf
and put the following lines in above file:
$ModLoad imudp $UDPServerAddress 127.0.0.1 $UDPServerRun 514 local2.* /var/log/haproxy-traffic.log local2.notice /var/log/haproxy-admin.log
then restart syslog server:
# systemctl restart rsyslog
4.1- Configure HAProxy front-end and back-ends
The following configuration defines a section to access HAProxy Stats page, front-end and back-end servers. Here we implement load balancer based on TCP connection. there are other modes that HAProxy can operate on it. it has been demonstrated in documentation.
listen stats bind *:9000 stats enable stats hide-version stats uri /stats stats admin if LOCALHOST stats auth haproxy:Lostp@1ss frontend TT bind *:80 mode tcp option tcplog option contstats option tcpka default_backend TT_web_servers backend TT_web_servers balance roundrobin mode tcp option tcpka option srvtcpka server webserver1 192.168.17.130:80 weight 1 maxconn 1024 check server webserver2 192.168.17.131:80 weight 1 maxconn 1024 check
then comment out any other front-end and back-end servers.
Now we restart HAProxy server for configuration to be applied:
# systemctl restart haproxy
5- Configure Firewall
Now we need to open ports 80, 443 and 9000:
# firewall-cmd --zone=public --permanent --add-service=http # firewall-cmd --zone=public --permanent --add-service=https # firewall-cmd --zone=public --permanent --add-port=9000/tcp # firewall-cmd --reload
6- Testing Configuration
to test configuration, in our client (Windows 10) we define the following test domain in c:\windows\system32\drivers\etc\hosts:
192.168.147.128 www.tuxtips.local
Now we open browser and point to this address in client:
http://www.tuxtips.local
by every refresh in browser we must see served page from Web server 1 then Web server 1 and this continue because we use Round Robin algorithm.
also to access statistics page we point to this address:
http://www.tuxtips.local:9000/stats
7- Configure HTTPS
In this extra step, we configure https for our HAProxy. here we use self-signed certificate, but if you have a public IP address, you can use Letsencrypt.
for generating certificate, we need private and public key. so generate it:
# mkdir /etc/ssl/tuxtips.local # cd /etc/ssl/tuxtips.local/ # openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout tuxtips.local.key -out tuxtips.local.crt # cd /etc/ssl/tuxtips.local/ # cat tuxtips.local.crt tuxtips.local.key > tuxtips.local.pem
Now open HAProxy configuration file and edit front-end section like the following:
# vim /etc/haproxy/haproxy.cfg
frontend TL bind *:80 bind *:443 ssl crt /etc/ssl/tuxtips.local/tuxtips.local.pem redirect scheme https if !{ ssl_fc } mode tcp option tcplog option contstats option tcpka default_backend TT_web_servers
then we restart HAProxy service:
# systemctl restart haproxy.service
finally we point to https version of our local domain:
https://www.tuxtips.local