rantsa.com

Blog Sharing Tutorial

Konfigurasi Nginx Load Balancing dengan Metode SSL Termination – Bagian 3

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.

  1. Buat directory sertifikat SSL
    $ sudo mkdir -p /etc/pki/tls/example.com
    $ sudo cd /etc/nginx/ssl/example.com
  2. Buat private key
    $ openssl genrsa -des3 -out server.key 2048
  3. Hilangkan passphrase
    $ sudo openssl rsa -in server.key -out server.key
  4. 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

Leave a Reply

Your email address will not be published. Required fields are marked *