Tuesday, November 22, 2016

NGINX Reverse Proxy

Bagian I. Contoh config Reverse Proxy dengan Cache:

Apabila ada web server dengan URL http://1.2.3.4 dan di depan server tsb ada Reverse Proxy server dengan URL http://5.5.5.5, maka apabila setting reverse proxy sudah benar, apabila client misalkan akses ke sebuah file ke Reverse Proxy (+Cache), maka apabila file tsb tidak ada di local storage dia maka Reverse Proxy akan meminta file tsb ke Server origin.

Jadi dari sisi client, akses berikut akan mendapatkan file yang sama:
http://1.2.3.4/src/img/haihai.jpg
http://5.5.5.5/src/img/haihai.jpg

Perhatikan bahwa di server Reverse Proxy direktori /src/img tidak harus ada pada awalnya secara fisik, namun akan terbentuk sendirinya apabila ada client yang akses ke http://5.5.5.5/src/img/haihai.jpg.

Berikut adalah contoh konfigurasi dari Reverse Proxy (+Cache):

http {
    proxy_cache_path  /data/nginx/cache  levels=1:2    keys_zone=STATIC:10m
    inactive=24h  max_size=10g  use_temp_path=off;
    server {
        location / {
            proxy_pass             http://1.2.3.4;
            proxy_set_header       Host $host;
            proxy_cache            STATIC;
            proxy_cache_valid      200  1d;
            proxy_cache_use_stale  error timeout invalid_header updating
                                   http_500 http_502 http_503 http_504;
        }
    }
}

Untuk menjadikan NGINX sebagai cache diperlukan directive proxy_cache_path dan proxy_cache. Directive proxy_cache_path untuk mengeset path dari proxy, sedangkan proxy_cache mengaktifkan cache. 

levels=1:2 berarti set 2 level direktori di bawah /data/nginx/cache. Jika tidak di buat 2 level maka semua file diletakkan di dalam satu direktori dan jika file terlalu banyak maka akan memperlambat akses ke chache.

key_zone=STATIC:10m berarti keyzone disediakan 10MB size di memory. 1 MB bisa menampung 8.000 key. Satu file akan dibuatkan satu key identifier sehingga 10 MB bisa menampung 80.000 key.

inactive=24h berarti apabila dalam 24 jam tidak ada yang merequest file di cache tsb maka file akan di hapus. Directive ini berbeda dengan expired content. Sebuah content expiry nya di set di cache control header.

max_size=10g berarti chache maximal sebanyak 10 GB. Apabila sudah penuh maka ada data yang di delete secara otomatis.

use_temp_path=off berarti jangan gunakan direktori lain untuk menulis sementara sebelum ditulis ke direktory proxy_cache_path.

proxy_chace mengakfifkan cache untuk semua content di bawah "location" (dalam hal ini location /).


Berikit video tutorial simple configuration reverse proxy.



Demo reverse proxy cache




Referensi:
https://www.nginx.com/resources/wiki/start/topics/examples/reverseproxycachingexample/
https://www.nginx.com/blog/nginx-caching-guide/


Bagian II. Layanan CDN Komersil

Saat ini terdapat layanan CDN komersial seperti Akamai, SwitfServe, CDN77 dan lainnya. Berikut akan diulas tentang CDN77.com.

CDN pada dasarnya bekerja dalam dua layer:
o DNS Layer
o Reverse Proxy Layer

Layer pertama adalah DNS, dimana pada layer ini client query ke autoritative name server CDN, dan kemudian authoritative name server ini akan memeriksa ip client dan memetakan (dengan logic tertentu) CDN server mana yang terdekat dari posisi client. Bisa per negara. Misal client dengan IP Indonesia maka autoritative name server CDN provider akan informasikan IP server CDN yang ada di IIX Indonesia.

Layer kedua adalah inti dari mesin CDN yaitu reverse proxy (setting dan cara kerja nya sudah dibahas di bagian I diatas).

Step mengaktifkan layanan CDN77: referensi disini.

1. Create CDN resource

Action ini sepertinya untuk membuat server reverse proxy untuk domain kita di masing-masing CDN server yang dimiliki provider CDN di seluruh dunia dan mendaftarkan nama domain nya misal 1234567890.rsc.cdn77.com.

Bisa dibayangkan sbb logic yang ada di DNS Server provider CDN.

1234567890.rsc.cdn77.org  IN A 5.5.5.5 (untuk USA)
                                             IN A 6.6.6.6 (untuk Eropa)
                                             IN A 9.9.9.9 (untuk IIX)

Dan resource ini harus di mapping ke Source nya yaitu server kita, misal server kita outcdn.mydomain.com

Artinya ada korelasi
outcdn.mydomain.com  <--> 1234567890.rsc.cdn77.org

2. Ubah di server DNS kita menggunakan CNAME

Awalnya

www.mydomain.com   IN A 3.3.3.3
incdn.maydomain.com   IN A 4.4.4.4

Menjadi

www.mydomain.com   IN A 3.3.3.3
outcdn.mydomain.com     IN CNAME  1234567890.rsc.cdn77.com

3. Ubah html code yang ada di Web Server kita:

Ganti
<img src="incdn.mydomain.com/path/to/image.jpg" />
dengan CDN URL
<img src="outcdn.mydomain.com"/path/to/image.jpg"/>

Referensi:
https://www.section.io/blog/cdn-reverse-proxy-cdn-comparison/

No comments: