Contents
I wanted to play with a simple load balancer with powerful implications. A load balancer using nginx as the front end and two apache servers on the backend.
server1 – apache – 192.168.1.89 (CentOS 6)
yum -y install httpd echo server1 /var/www/html/index.html lokkit -s http -s https chkconfig httpd on && service httpd restart
server2 – apache -192.168.1.90 (CentOS 6)
yum -y install httpd echo server2 /var/www/html/index.html lokkit -s http -s https chkconfig httpd on && service httpd restart
load balancer – nginx – 192.168.1.88 (CentOS 6/7/8)
Add the nginx repository (CentOS 6/7)
echo '[nginx] name=nginx repo baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck=0 enabled=1' > /etc/yum.repos.d/nginx.repo
Install nginx (CentOS 6/7/8)
yum install nginx
Apply Firewall Rules (CentOS 6/7/8)
# CentOS 6 lokkit -s http -s https # CentOS 7/8 (The following approach will not disrupt the firewalld service) firewall-cmd --permanent --add-service={http,https} firewall-cmd --add-service={http,https}
SELinux may reap havoc, an boolean needs to be enabled.
setsebool -P httpd_can_network_connect on
Backup the default.conf file. (CentOS 6/7)
cp /etc/nginx/conf.d/default.conf{,.original}
Modify the default.conf file.
vi /etc/nginx/conf.d/default.conf
Add to the top the upstream section and under location below the two proxy* lines.
upstream web_backend { # ip_hash; server 192.168.1.89; server 192.168.1.90; } server { listen 80; server_name localhost; location / { root /usr/share/nginx/html; index index.html index.htm; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://web_backend; }
Or a more automated approach. Not pretty but works.
sed -i.original'/\ \ \ \ \ \ \index/a\ \ \ \ \ \ \ \ \proxy_pass http://web_backend;' /etc/nginx/conf.d/default.conf sed -i '/\ \ \ \ \ \ \index/a\ \ \ \ \ \ \ \ \proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;' /etc/nginx/conf.d/default.conf cat > /tmp/default /dev/stdin /etc/nginx/conf.d/default.conf << EOF upstream web_backend { server 192.168.1.89; server 192.168.1.90; } EOF /bin/cp /tmp/default /etc/nginx/conf.d/default.conf
Restart nginx.
# CentOS 6 chkconfig nginx on && service nginx start # CentOS 7/8 systemctl enable --now nginx
Using your favorite web-browser, type in http://192.168.1.88 and refresh the page a few times to see the text change from server1 to server2.
Source(s)
- https://www.nginx.com/resources/admin-guide/reverse-proxy/
- https://www.nginx.com/resources/wiki/start/topics/tutorials/install/
- http://think-devops.blogspot.com/2013/03/nginx-crumbs.html
- https://unix.stackexchange.com/questions/99350/how-to-insert-text-before-the-first-line-of-a-file