Konfigurasi Loadbalance HAProxy dengan SSL pada Domain | VPS Centos

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

Related Articles

Comments