Http/2 adalah versi baru dari protocol http, yang mengantikan versi sebelumnya yaitu http/1.1 . http/2 dirilis pada tahun 2015 dan sudah terdaftar pada standar IETF. http/2 sudah mendukung beberapa web server diantaranya adalah nginx. untuk menerapkan http/2 pada website, kita harus mengunakan https.
Perbedaan Htpp/1.1 vs Http/2
- Single, Persistent Connection – ini yang cukup membedakan dengan http/1.1 yaitu single connection berarti hanya ada satu koneksi yang digunakan untuk meload halaman web, seperti yang ada pada gambar diatas, mengunakan koneksi yang sama selama halaman web terbuka.
- Multiplexing – mungkin secara sederhananya adalah kita dapat merequest dan merespon beberapa objek dari web dengan mengunakan single koneksi, sehingga proses transfer data semakin cepat.
- Header compression dan Binary encoding – biasanya web browser mengirimkan header untuk menginformasikan server tersebut mendukung kompresi data gzip. pada http/2 ini tidak hanya mengunakan single connection tetapi juga memberikan compresi pada setiap data jadi data yang awalnya besar dikompres menjadi lebih kecil sehingga prosesnya menjadi lebih cepat, dalam memberikan respon ke klien
- SSL Encrytion – pada http/2 wajib hukumnya mengunakan ssl/tls dalam hal ini adalah https, pada http/2 ini selain mempercepat respon dengan single connection , dia juga memprioritaskan keamanan data.
segitu aja teorinya, kita langsung aja ke pokok pembahasan 😀
sebelumnya anda harus menginstall nginx disini , setelah itu kita mengenerate kunci untuk mengaktifkan https
1 |
cd /etc/ssl/ |
kita akan membuat kunci di folder tersebut
Membuat kunci private dengan nama dummy, panjangnya 2048 bit
1 |
openssl genrsa -out dummy.key 2048 |
membuat sertifikat permohonan atau CSR (csertificate of signin request)
1 |
openssl req -new -key dummy.key -out dummy.csr |
1 2 3 4 5 6 7 |
Country Name (2 letter code) [XX]:ID State or Province Name (full name) []:Jawa Barat Locality Name (eg, city) [Default City]:Depok Organization Name (eg, company) [Default Company Ltd]:Routecloud Networks Organizational Unit Name (eg, section) []:Routecloud Secure Common Name (eg, your name or your server's hostname) []:www.routecloud.net Email Address []:alan@routecloud.net |
kemudian supaya certificate permohonan kita valid maka harus di tandatangai dulu mengunakan kunci private yang sudah kita buat, kita bisa juga mengunakan jasa validasi kunci seperti comodo, digicert dll
1 |
openssl x509 -req -days 365 -in dummy.csr -signkey dummy.key -out dummy.crt |
kemudian konfig nginx
1 |
nano /etc/nginx/nginx.conf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
server { listen 80; server_name localhost; return 301 https://10.212.113.10/; #charset koi8-r; root /etc/nginx/html; index index.php; #access_log logs/host.access.log main; location / { # try_files $uri/ $uri /index.php?$query_string; try_files $uri $uri/ /index.php?$args; } # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # location ~ \.php$ { # root html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } server { listen 443 ssl http2; ssl_certificate /etc/ssl/dummy.crt; ssl_certificate_key /etc/ssl/dummy.key; root /etc/nginx/html; index index.php; location / { # try_files $uri/ $uri /index.php?$query_string; try_files $uri $uri/ /index.php?$args; } location ~ \.php$ { # root /etc/nginx/html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } |
pada konfigurasi nginx, kita meredirect setiap koneksi http untuk diarahkan ke https
Testing http/1.1
Testing http/2
nah sekarang web server kita sudah menjadi http/2.0
Sekarang saatnya ngebanchmark performa http/2 vs http/1.1 mengunakan tool ab, saya akan memberikan 1000 request pada http/1.1 dan http/2
pada http/1.1
1 |
ab -n 1000 -c 100 http://10.212.113.11/ |
Hasilnya :
pada http/2.0
1 |
ab -n 1000 -c 100 http://10.212.113.10/ |
Hasilnya
Wooow, hasilnya sangat signifikan, antara htt1.1 vs http2.0
Tabel perbandingan waktu bancmark 1000 request
Http/1.1 | Â Http/2.0 | |
waktu | Â 4.651 second | 0.481 second |
mungkin cukup sekian dulu, hasil pengujian kecil tentang http/2.0 pada nginx, semoga bisa bermanfaat.
wasallam
Isra Mi’raj Nabi Muhammad Shallallahu ‘alaihi wasallam 1437 H
System Engineer
Komentar