Kali ini saya akan membahas cara recompile nginx pada Os Centos 7 atau yang lebih lama, Debian 8 dan Ubuntu 14.04 agar mendukung HTTP/2 dan Tls 1.3. Secara default Nginx pada Os tersebut di compile menggunakan OpenSSL 1.0.1 sehingga itu tidak memungkinkan untuk menggunakan HTTP/2 dan Tls 1.3. Karena HTTP/2 bisa berjalan di OpenSSL 1.0.2 atau yang lebih baru yang mendukung ALPN, Sedangkan untuk Tls 1.3 bisa berjalan di OpenSSL 1.1.1 atau yang lebih baru. Itu sebabnya kita perlu melakukan kompilasi ulang nginx menggunakan OpenSSL 1.1.1 agar mendukung HTTP/2 dan Tls 1.3.
Apa Itu HTTP/2 Dan Tls 1.3
HTTP atau kepanjangan dari Hypertext Transfer Protocol merupakan sebuah protokol jaringan lapisan aplikasi yang digunakan untuk proses pertukaran data dalam internet antar komputer, HTTP/2 merupakan generasi lanjutan dari HTTP/1.1 yang lebih lama. HTTP/2 memiliki performance yang lebih baik dari HTTP/1.1 karena tujuan utama pengembangan HTTP/2 untuk memperbaiki kelemahan dan kekurangan di HTTP/1.1, Yang membuat HTTP/2 lebih baik karena HTTP/2 menggunakan teknologi multiplexing yang berarti dalam satu koneksi bisa meminta dan mendownload beberapa objek sekaligus dan dilakukan secara paralel. Berbeda dengan HTTP/1.1 yang hanya menggunakan satu koneksi untuk setiap object di web server yang akan ditampilkan di browser pengguna. Sehingga Ini bisa mengakibatkan penumpukan atau bottleneck dan tentunya mengakibatkan proses menjadi lebih lambat.
Sedangkan Tls 1.3 merupakan versi terbaru dari TLS (Transport Layer Security) yang memiliki banyak kelebihan dari versi sebelumya (Tls 1.2). Pada Tls 1.3 memberikan kecepatan yang jauh lebih baik salah satunya proses handshake yang hanya membutuhkan 1 kali proses antara browser dan server, sedangkan pada Tls 1.2 membutuhkan 2 kali proses. Selain itu di Tls 1.3 ada fitur Zero Round-Trip Time (0-RTT) yang membuatnya bisa lebih cepat dari Tls versi sebelumnya.
Cara recompile nginx menggunakan OpenSSL 1.1.1
Untuk memeriksa versi OpenSSL kamu gunakan perintah ini
openssl version
Sekarang proses recompile, pertama install dependensi yang dibutuhkan untuk compile:
Centos 7
yum install gc gcc gcc-c++ pcre-devel zlib-devel make wget openssl-devel libxml2-devel libxslt-devel gd-devel perl-ExtUtils-Embed GeoIP-devel gperftools gperftools-devel libatomic_ops-devel perl-ExtUtils-Embed -y
Debian Dan Ubuntu
apt-get install dpkg-dev libpcrecpp0 libgd2-xpm-dev libgeoip-dev libperl-dev
Selanjutnya periksa versi nginx yang digunakan
nginx -V
Salin dan simpan versi dan konfigurasi nginxnya dari output di atas karena nanti digunakan saat proses compile, konfigurasi yang dimaksud setelah tulisan configure arguments:.
Pindah ke folder untuk compile
cd /usr/local/src/
Tentukan versi nginx untuk di compile
NGINX_VERSION=1.22.0
Ganti 1.22.0 dengan versi nginx kamu sesuai yang tertulis di output nginx -V tadi.
Selanjutnya download dan extract file yang dibutuhkan:
wget --no-check-certificate https://www.openssl.org/source/openssl-1.1.1g.tar.gz && tar -xzvf openssl-1.1.1g.tar.gz wget http://nginx.org/download/nginx-${NGINX_VERSION}.tar.gz && tar -xvzf nginx-${NGINX_VERSION}.tar.gz wget http://hg.nginx.org/njs/archive/1c50334fbea6.zip && unzip 1c50334fbea6.zip cd nginx-${NGINX_VERSION}/
Pada langkah sebelumnya kamu telah menyalin konfigurasi nginx kamu silahkan edit konfigurasi tersebut dan tambahkan 3 parameter berikut ini:
./configure --add-dynamic-module=/usr/local/src/njs-1c50334fbea6/nginx --with-openssl=/usr/local/src/openssl-1.1.1g
Setelah di edit kurang lebih akan seperti ini:
./configure –prefix=/etc/nginx –sbin-path=/usr/sbin/nginx –modules-path=/usr/lib64/nginx/modules –conf-path=/etc/nginx/nginx.conf –error-log-path=/var/log/nginx/error.log –http-log-path=/var/log/nginx/access.log –pid-path=/var/run/nginx.pid –lock-path=/var/run/nginx.lock –http-client-body-temp-path=/var/cache/nginx/client_temp –http-proxy-temp-path=/var/cache/nginx/proxy_temp –http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp –http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp –http-scgi-temp-path=/var/cache/nginx/scgi_temp –user=nginx –group=nginx –with-compat –with-file-aio –add-dynamic-module=/usr/local/src/njs-1c50334fbea6/nginx –with-threads –with-http_addition_module –with-http_auth_request_module –with-http_dav_module –with-http_flv_module –with-http_gunzip_module –with-http_gzip_static_module –with-http_mp4_module –with-http_random_index_module –with-http_realip_module –with-http_secure_link_module –with-http_slice_module –with-http_ssl_module –with-http_stub_status_module –with-http_sub_module –with-http_v2_module –with-mail –with-mail_ssl_module –with-stream –with-stream_realip_module –with-stream_ssl_module –with-stream_ssl_preread_module –with-cc-opt=’-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong –param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC’ –with-ld-opt=’-Wl,-z,relro -Wl,-z,now -pie’ –with-openssl=/usr/local/src/openssl-1.1.1g
Catatan: Konfigurasi di atas hanya contoh dan tidak untuk digunakan di proses recompile kamu, Kamu harus menggunakan konfigurasi dari output nginx -V di server kamu.
Salin dan tempelkan konfigurasi yang sudah di edit ke terminal ssh pada proses compile tadi dan tekan enter untuk menjalankan dan tunggu hingga selesai.
Selanjutnya proses compile nginx
make && make install
Tunggu hingga proses compile selesai biasanya akan selesai dalam beberapa menit.
Selanjutnya menonaktifkan update nginx otomatis, Karena jika nginx di update maka akan menggunakan konfigurasi sebelumnya, Sehingga jika kamu ingin memperbaharui versi nginx kamu tentunya harus melakukan recompile.
Untuk menonaktifkan update edit file /etc/yum.repos.d/nginx.repo.
nano /etc/yum.repos.d/nginx.repo
Rubah enabled=1 menjadi enabled=0 simpan dan keluar dari text editor, Jika menggunakan nano caranya tekan Ctrl+x ketik y dan tekan Enter.
Untuk mengaktifkan HTTP/2 tambahkan http2 pada baris listen di konfigurasi server domain (server block) untuk protokol https. Jika menggunakan Vestacp versi terbaru sudah terdapat Proxy Template http2 silahkan rubah menggunakan template tersebut, namun jika tidak ada letak konfigurasi domain ada di /home/admin/conf/web/domainkamu.com.nginx.ssl.conf rubah domainkamu.com dengan nama domain situs kamu.
nano /home/admin/conf/web/domainkamu.com.nginx.ssl.conf
Contoh:
server {
listen xxx.xxx.xxx.xxx:443 ssl http2;
server_name domainkamu.com www.domainkamu.com;
ssl_certificate /home/admin/conf/web/ssl.domainkamu.com.pem;
ssl_certificate_key /home/admin/conf/web/ssl.domainkamu.com.key;
Dan untuk mengaktifkan Tls 1.3 kamu cukup tambahkan TLSv1.3 pada baris ssl_protocols di konfigurasi nginx jika belum ada. Jika Kamu menggunakan Vestacp file configurasi terletak di /etc/nginx/nginx.conf
nano /etc/nginx/nginx.conf
Contoh:
ssl_session_cache shared:SSL:20m;
ssl_session_timeout 1d;
ssl_protocols TLSv1.2 TLSv1.3;
Jika sudah periksa konfigurasi nginx kamu
nginx -t
Jika tidak ada masalah restart nginx untuk menerapkan perubahan.
Centos
service nginx restart atau systemctl restart nginx
Debian dan Ubuntu
service nginx reload
Dan akhirnya kamu telah berhasil mengaktifkan HTTP/2 dan Tls 1.3 Di nginx. Untuk memeriksa HTTP/2 domain kamu sudah aktif atau belum kamu bisa gunakan tools online seperti https://tools.keycdn.com/http2-test dan untuk menguji Tls 1.3 kamu bisa gunakan https://www.ssllabs.com/ssltest/index.html atau yang lainya.
Untuk lebih jelas dan agar mudah memahami silahkan simak video dibawah ini:
Sekian tulisan tentang Konfigurasi HTTP/2 Dan Tls 1.3 Di Nginx Pada Centos 7 semoga membantu..