Konfigurasi Loadbalance HAProxy dengan SSL pada Domain | VPS Centos
- by Asep Ependi
- 16 June 2022
- 772 views

Selamat datang kembali di website asepit yang selalu memberikan informasi mengenai dunia Teknologi khususnya pada bidang Komputer, Pemrograman, dan juga Jaringan. Bagaimana kabar kalian semua mudah - mudahan dalam keadaan sehat wal afiat dan selalu dilancarkan rezekinya, Pada kesempatan kali ini saya akan membahas mengenai cara konfigurasi Loadbalance HAProxy dengan Domain beserta SSL nya pada VPS Centos 7. Loadbalance ini merupakan suatu metode yang dapat membagi sebuah traffic data ke beberapa server yang bertujuan agar tidak membebani satu server saja sehingga server akan menjadi lebih seimbang dan mengurangi resiko overload. Algoritma yang sering digunakan yaitu Roundrobin, Lastconn, dan Source. Untuk skema dan langkah - langkah konfigurasinya kurang lebih seperti ini
* Pada Server 1 disini yang akan digunakan sebagai tempat penyimpanan aplikasi, saya memasukkan 2 aplikasi ke dalam server VPS tersebut yaitu aplikasi Frontend
* Pada Server 2 nya disini saya akan gunakan sebagai akses untuk API
* Pada Server Loadbalance ini digunakan sebagai pengatur trafic akses aplikasi nya, yang dimana ketika user mengakses Aplikasi A maka akan redirect ke server 1 begitupun ketika User mengakses Aplikasi B maka akan redirect juga ke Server 1
* Pada Server 3 ini bakal dijadikan sebagai penyimpanan sebuah Database
* Algoritma yang dipakai yaitu Source, karena Algoritma ini
1. Instal terlebih dahulu system operasi Centos 7 (skip jika sudah ada) dan update system tersebut dengan perintah berikur
yum update -y
2. Login ke VPS yang akan dijadikan sebgai loadbalance & tambahkan hostname Server 1 & 2 ke dalamnya sebagai contoh seperti ini
vim /etc/hosts
119.90.239.213 domain-frontend.com (IP Private 192.168.10.10)
119.90.239.213 domain-frontend-2.com (IP Private 192.168.10.10)
119.90.239.211 domain-backend.com (IP Private 192.168.10.11)
3. Masukkan juga hostname di atas ke Server 1 & 2
4. Lalu instal HAProxy dan salin konfigurasi default di server Loadbalance dengan perintah berikut
yum install haproxy -y
cd /etc/haproxy/
cp haproxy.cfg haproxy.cfg.orig
5. Tambahkan beberapa syntak di haproxy.cfg tadi kurang lebih seperti ini
vim haproxy.cfg
#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
log 127.0.0.1 local2
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy
group haproxy
daemon
# turn on stats unix socket
stats socket /var/lib/haproxy/stats
maxsslconn 256
tune.ssl.default-dh-param 2048
ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
ssl-default-bind-options no-sslv3 no-tlsv10 no-tlsv11 no-tls-tickets
#---------------------------------------------------------------------
# Defaults configuration for L7 (http) loadbalancer
#---------------------------------------------------------------------
# Default settings
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
#---------------------------------------------------------------------
# round robin balancing between the various backends
#---------------------------------------------------------------------
frontend _http
bind :80
default_backend app_f
redirect scheme https if !{ ssl_fc }
frontend _https
bind :443 ssl crt /etc/haproxy/ssl/ssl.pem
use_backend app_f if { hdr_end(host) -i domain.frontend.com }
use_backend app_f if { hdr_end(host) -i domain.frontend-2.com }
use_backend api if { hdr_end(host) -i domain.backend.com }
http-response set-header Access-Control-Allow-Origin "*"
http-response set-header Access-Control-Max-Age 3628800
atau
capture request header origin len 128
http-response set-header Access-Control-Allow-Origin %[capture.req.hdr(0)] if { capture.req.hdr(0) -m found }
backend app_f
balance source
server domain.frontend 192.168.10.10:443 ssl ca-file /etc/haproxy/ssl/ca.pem check-ssl check
backend api
balance source
server domain.backend 192.168.10.11:443 check ssl ca-file /etc/haproxy/ssl/ca.pem check-ssl check
6. Ubah pada bagian konfigurasi Rsyslog dengan menghilangkan komen (tanda #) pada bagian ini
vim /etc/rsyslog.conf
# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
$UDPServerAddress 127.0.0.1
7. Buat konfigurasi HAProxy untuk Rsyslog
cd /etc/rsyslog.d/
vim haproxy.conf
local2.=info /var/log/haproxy-access.log
local2.notice /var/log/haproxy-info.log
8. Jalankan & restart HAProxy dan Rsyslog
systemctl restart haproxy
systemctl enable haproxy
systemctl status haproxy
systemctl restart rsyslog
systemctl enable rsyslog
systemctl status rsyslog
9. Kemudian lanjut pindah ke Server 1 & 2 untuk penginstalan Nginx nya
yum install epel-release -y
yum install nginx -y
* Pada Server 1 disini saya ada tambahan untuk penginstalan NodeJs dengan menambahkan repositori nya terlebih dulu
curl -sL https://rpm.nodesource.com/setup_14.x | sudo bash -
yum install nodejs -y
* Pada Server 2 disini saya ada tambahan untuk penginstalan PHP 8 dan juga module PHP FPM
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm -y
yum install https://rpms.remirepo.net/enterprise/remi-release-7.rpm
yum install yum-utils -y
yum-config-manager --enable remi-php80
yum install php php-cli -y
yum install php80-php-fpm -y
systemctl restart php80-php-fpm
systemctl enable php80-php-fpm
systemctl status php80-php-fpm
10. Dan coba buat syntak sederhana untuk memastikan loadbalance sudah berjalan / belumnya
#untuk frontend 1
cd /var/www/frontend-1/dist/
echo “<h1>Server 1 > Domain Frontend</h1>” > index.html
#untuk frontend 2
cd /var/www/frontend-2/dist/
echo “<h1>Server 2 > Domain Frontend 2</h1>” > index.html
11. Konfigurasi pada Server Frontend
* Konfigurasi Aplikasi Pertama
vim /etc/nginx/conf.d/frontend.conf
server {
listen 80;
listen [::]:80;
server_name domain-frontend.com;
root /var/www/frontend-1/dist/;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
error_page 404 /404.html;
location = /404.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
listen 443 http2 ssl;
listen [::]:443 http2 ssl;
ssl_certificate /etc/nginx/conf.d/ssl/ssl-bundel.pem;
ssl_certificate_key /etc/nginx/conf.d/ssl/ssl.key;
# side note: only use TLS since SSLv2 and SSLv3 have had recent vulnerabilities
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
}
* Konfigurasi Aplikasi Kedua
vim /etc/nginx/conf.d/frontend-2.conf
server {
listen 80;
listen [::]:80;
server_name domain-frontend-2.com;
root /var/www/frontend-2/dist/;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
error_page 404 /404.html;
location = /404.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
listen 443 http2 ssl;
listen [::]:443 http2 ssl;
ssl_certificate /etc/nginx/conf.d/ssl/ssl-bundle.pem;
ssl_certificate_key /etc/nginx/conf.d/ssl/ssl.key;
# side note: only use TLS since SSLv2 and SSLv3 have had recent vulnerabilities
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
}
12. Konfigurasi pada Server Backend
server {
listen 80;
listen [::]:80;
server_name domain-backend.com;
root /var/www/backend/public;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
client_max_body_size 1024M;
index index.php;
charset utf-8;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
error_page 404 /index.php;
location ~ \.php$ {
fastcgi_pass unix:/var/run/php80-fpm.sock;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.(?!well-known).* {
deny all;
}
listen 443 http2 ssl;
listen [::]:443 http2 ssl;
ssl_certificate /etc/nginx/conf.d/ssl/ssl-bundle.pem;
ssl_certificate_key /etc/nginx/conf.d/ssl/ssl.key;
# side note: only use TLS since SSLv2 and SSLv3 have had recent vulnerabilities
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
}
13. Dan Jalankan Nginx untuk melihat perubahan yang telah di masukkan
systemctl restart nginx
systemctl enable nginx
systemctl status nginx
14. Coba akses pada browser domain frontend yang pertama dan yang kedua
15. Jika tidak dapat muncul kita bisa mendisable Firewall / mendaftarkan port yang berjalan ke Firewall tersebut (terapkan disemua server)
systemctl stop firewalld
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload
Mungkin hanya itu untuk pembahasan kali ini, saya mohon ma'af bila dalam penyampaian serta penulisan terdapat sebuah kesalahan. Jangan lupa ikuti juga platform ASEP IT lainnya dibawah ini, saya cukupkan sekian dan Terima Kasih...
Website klik disini
Youtube klik disini
Fans Page klik disini
Comments