Server load balancer dan backend
Update Server
Lakukan update terlebih dahulu di semua server supaya mendapatkan update paket yang terbaru
$ sudo yum -y update
Install Nginx
Install paket nginx di semua server sebagai web server
$ sudo yum -y install nginx
Server load balancer
Generate Keys dan Buat Sertifikat SSL
Pada server load balancer kita perlu membuat sertifikat SSL yang digunakan untuk pengguna mengakses halaman https, karena ini hanya devel maka sertifikat yang kita buat berupa private sertifikat. Jika ingin dikenali sebagai public sertifikat silahkan memesan sertifikat pada penyedia.
- Buat directory sertifikat SSL
$ sudo mkdir -p /etc/pki/tls/example.com
$ sudo cd /etc/nginx/ssl/example.com - Buat private key
$ openssl genrsa -des3 -out server.key 2048 - Hilangkan passphrase
$ sudo openssl rsa -in server.key -out server.key - Buat CSR (Certificate Signing Request):
$ sudo openssl req -new -key server.key -out server.csr
$ sudo openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
didalam directory akan berisi file :
- server.key : private key
- ca-certs.pem : sertifikat CA, digunakan hanya untuk sertifikat yang valid dari CA yang telah tervalidasi
- server.crt : sertifikat SSl untuk domain kita
File Virtual Host dan Upstream Modul
Buat file virtual host pada directory nginx.d
$ sudo cd /etc/nginx/conf.d/
$ sudo vi example.com.vhost
isikan upstream modul yang berisi ip dari server backend
upstream mywebapp1 {
server 10.130.227.11;
server 10.130.227.22;
}
Lanjutkan dengan isian server block setelah baris diatas. Block ini berisi nama domain, sertifikat SSL, redirect dari http ke https, upstream server dan header yang mengarahkan paket ke server backend
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name example.com www.example.com;
ssl on;
ssl_certificate /etc/pki/tls/example.com/server.crt;
ssl_certificate_key /etc/pki/tls/example.com/server.key;
ssl_trusted_certificate /etc/pki/tls/example.com/ca-certs.pem;
ssl_session_cache shared:SSL:20m;
ssl_session_timeout 10m;
ssl_prefer_server_ciphers on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers
ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS;
add_header Strict-Transport-Security "max-age=31536000";
location / {
proxy_pass http://mywebapp1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
simpan file ini dan lakukan reload service nginx
$ sudo service nginx reload
Server Backend
Testing Hasil Konfigurasi
Buat contoh halaman php di kedua server backend sebagai testing apakah konfigurasi yang sudah kita lakukan sudah berjalan atau belum.
$ sudo vi /usr/share/nginx/html/test.php
PC Pengguna
Lakukan akses halaman tersebut dengan menggunakan perintah curl -k (opsi -k digunakan untuk mengabaikan error sertifikat SSL private)
$ curl https://example.com/test.php https://example.com/test.php https://example.com/test.php
Hasil dari perintah tersebut :
Host: example.com
Remote Address: 10.130.245.116
X-Forwarded-For: 100.100.100.2
X-Forwarded-Proto: https
Server Address: 10.130.227.11
Server Port: 80
Host: example.com
Remote Address: 10.130.245.116
X-Forwarded-For: 100.100.100.2
X-Forwarded-Proto: https
Server Address: 10.130.227.22
Server Port: 80
Host: example.com
Remote Address: 10.130.245.116
X-Forwarded-For: 100.100.100.2
X-Forwarded-Proto: https
Server Address: 10.130.227.11
Server Port: 80