Tuesday, April 7, 2020

Nginx Config Cheat Sheet

Nginx
Nginx adalah salah satu webserver yang ringan dan powerfull. Sehingga kabarnya hampir 30% website di dunia menggunakan webserver ini. Dulu si lebih sering pake Apache2/Httpd, maklum ngikut arus yang uda ada, namun semenjak saya pindah kerja, hampir mayoritas webserver menggunakan Nginx, rada kagok dan karena masih awal-awal jadi bingung, gimana ngapalinnya semua bagian-bagian config tersebut. 

Ternyata oh ternyata, jangan khawatir, ngga usah diapalin, dipahami aja fungsi-fungsi dari masing-masing bagian,. Untuk confignya ga usah di buat pusing. Mozilla sudah berbaik hati membuatkan generator config. Ngga cuma nginx, tapi ada beberapa config lain seperti apache, haproxy, redis, traefik dan masih banyak lagi. bisa di cek disini.

Seperti biasa, first thing first, untuk environment yang saya gunakan adalah sebagai berikut :


OS : Ubuntu Server 18.04 LTS
Nginx : 1.17.10
Dan berikut adalah beberapa cheat sheet config Nginx yang sudah saya pelajari dan saya gunakan selama bekerja dengan nginx

Setup SSL Nginx
Untuk meningkatkan kualitas dan keamanan dari web, kita bisa memasang sertifikat SSL, berikut adalah config minimal untuk memasang sertifikat SSL di Nginx
server {
        listen 443 ssl http2; # by default, its used 443        
        listen [::]:443 ssl http2; # by default, its used 443
        # .....
        server_name         your.domain.here; 
        ssl_certificate     /path/to/your/certificate.crt;
        ssl_certificate_key /path/to/your/privkey.pem;

        ssl_session_timeout 1d;
        ssl_session_cache shared:MozSSL:10m;  # about 40000 sessions

        # intermediate configuration
        ssl_protocols TLSv1.2 TLSv1.3; # adjust your protocol here 
        ssl_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_prefer_server_ciphers off;
        # .....

}

Force atau Redirect http ke https
Ada saat dimana kita perlu untuk mengamankan situs dan user dengan cara mengaktifkan fiture enkripsi atau https di web
# http section
server {
       listen 80;
       listen [::]:80;

        # just put the return command here
        return 301 https://$host$request_uri;
}
# https section
server {
       listen 443 ssl http2;
       listen [::]:443 ssl http2;
        #.....
        # put resource rule and path and ssl here config here
        #.....
}

Setup Default Config Vhost
dan sebagai catatan, apabila kita menggunakan satu server untuk beberapa resource web, maka hanya ada satu file config yang berisi default_server untuk tiap instance nginx
server {
        listen 80 default_server;
        listen [::]:80 default_server;
        # .....

}

Proxy External Public Resource ke Web
Misalnya kita akan menempatkan path tertentu, namun konten dari path tersebut diambil dari external page atau resource. Contohnya page tersebut memiliki folder assets, agar page dapat tampil sempurna di web kita confignya adalah sebagai berikut
server {

        # .....
        location /assets/ { # put the path and make sure last slash included
            proxy_pass https://external.domain.here/assets;
        }
        # .....
}

Load balance atau proxy resource
Misalnya dari gateway ke server-server backend, atau dari  dari host ke container
server {

        # .....
        location / {
            proxy_pass https://your.domain.here; # put upstream domain here
        }
        # .....
}
upstream your.domain.here { # customize domain name
        server 172.10.0.2:443; # container/backend server IP address
    }

Redirect Request apapun ke Halaman tertentu
Semisal kita ingin request-request apapun yang ditujukan ke www.bukananakit.com (/about atau /contact dan path-path lain) di arahkan ke homepage bukananakit.com
server {

        # .....
        rewrite ^ https://bukananakit.com # put the target here
        # .....

}

Redirect dan Menimpa Domain tanpa Mengubah URL Path
Semisal URL lama http://www.bukananakit.com/resource/web kemudian ingin di redirect ke URL baru menjadi http://bukananakit.com/resource/web, atau apapun yang diawali dari www. namun ingin me-redirect ke domain yang tidak memiliki www, dan tanpa mengubah path url
server {

        # .....
        rewrite ^ https://bukananakit.com$request_uri; # put the target here
        # .....

}

Mengubah Path URL 
Semisal URL lama http://www.bukananakit.com/resource/web kemudian ingin diubah menjadi  http://www.bukananakit.com/baru/resource/web tanpa ingin mengubah apapun yang ada di dalam code
server {

        # .....
        location = /resource/web {
           return 301 /baru/resource/web ; # put the new path here
        }
        # .....

}
Semoga bermanfaat. Jika ada pertanyaan silahkan tinggalkan komentar atau bisa chat via telegram.

Referensi :

No comments:

Post a Comment