Nginx adalah server web sumber terbuka yang kuat, cepat, andal, dan dinamis yang populer untuk melayani situs dengan lalu lintas tinggi. Selain itu, ia terkenal karena kemudahan konfigurasi, skalabilitas tinggi, dan dukungan untuk berbagai protokol.
Di antara protokol yang didukung oleh Nginx adalah protokol HTTP/2 baru yang keunggulan utamanya dibandingkan pendahulunya HTTP 1.1 adalah kecepatan transfer tinggi yang diperlukan untuk situs web kaya konten.
Dalam panduan ini, kita akan mempelajari instalasi dan pengaturan server Nginx yang aman dengan Dukungan HTTP/2:
Prasyarat
Untuk memulai, mari kita periksa penerbangan dan lihat apakah kita memiliki yang berikut
- Instance server Ubuntu 18.04 LTS
- Nginx versi 1.9.5 atau lebih tinggi (Untuk memverifikasi versi Nginx, jalankan
nginx -v
), baca Instal Nginx di Ubuntu 18.04. - OpenSSL versi 1.0.2 atau lebih tinggi (Periksa versi menggunakan versi openssl)
- Pengguna non-root biasa dengan hak istimewa sudo
- Nama Domain yang Penuh Kualifikasi (FQDN) Dalam hal ini, kita akan menggunakan
crazytechgeek.info
dibeli dari GoDaddy.Catatan A nama domain harus mengarah ke alamat IP server. crazytechgeek.info telah diarahkan ke 216.200.116.207.
- Sertifikat SSL (Sertifikat yang ditandatangani sendiri atau dari Let's encrypt SSL. Demikian pula, Anda dapat membeli satu dari penyedia yang berbeda.
Langkah 1 – Mengaktifkan Dukungan HTTP /2.0
Untuk memulai, diasumsikan bahwa Anda telah mengonfigurasi blok server Nginx di
/etc/nginx/sites-available/your_domain
Dalam kasus kami, blok server adalah /etc/nginx/sites-available/crazytechgeek.info
.
Menggunakan editor teks favorit Anda, buka file blok server dan temukan listen
direktif seperti yang ditunjukkan
Arahan pertama menunjukkan koneksi IPv6 sedangkan yang kedua adalah untuk koneksi IPv4
Sekarang, kita akan memodifikasi setiap direktif untuk menyertakan http2
bendera seperti yang ditunjukkan
Ini akan menginstruksikan Nginx untuk menggunakan HTTP/2 pada browser yang didukung
Simpan file konfigurasi dan keluar dari editor Anda.
Selanjutnya, buka /etc/nginx/sites-available/default
file dan buat perubahan yang sama
Simpan dan keluar dari editor teks.
Hanya untuk memastikan bahwa tidak ada kesalahan sintaks di salah satu file Nginx, jalankan perintah di bawah ini
$ sudo nginx -t
Keluaran
Langkah 2 – Membersihkan Cipher Lama dan Tidak Aman
Agar HTTP/2 berfungsi seperti yang diharapkan, kita harus menghindari penggunaan sandi lama dan tidak aman yang telah masuk dalam daftar hitam HTTP/2. Rangkaian sandi adalah algoritme kriptografi yang menentukan bagaimana lalu lintas akan dienkripsi.
Jika certbot digunakan untuk mendapatkan sertifikat, maka sandi di jalur /etc/letsencrypt/options-ssl-nginx.conf
tidak cukup aman untuk HTTP/2. Namun, modifikasi file ini hanya akan menyebabkan kesalahan dan mencegah certbot menerapkan pembaruan. Ini berarti kita harus menentukan daftar sandi dan menginstruksikan Nginx untuk mengabaikan file
Buka file konfigurasi untuk blok server domain Nginx Anda
$ vim /etc/nginx/sites-available/crazytechgeek.info
Komen baris ini
# include /etc/letsencrypt/options-ssl-nginx.conf;
Di bawah baris itu, tambahkan baris di bawah ini untuk menentukan sandi yang diizinkan
ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
Simpan file dan keluar dari editor teks
Jika sertifikat yang ditetapkan sendiri digunakan, atau sertifikat pihak ketiga, maka buka file
/etc/nginx/snippets/ssl-params.conf
$ sudo vim /etc/nginx/snippets/ssl-params.conf
Cari baris seperti yang ditunjukkan di bawah ini
...
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384;
...
Ubah file sesuai seperti yang ditunjukkan di bawah ini
...
ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
Terakhir simpan dan keluar dari file konfigurasi
Sekali lagi periksa apakah ada kesalahan konfigurasi Nginx
$ sudo nginx -t
Jika semuanya berjalan dengan baik, Anda akan melihat output di bawah ini seperti yang ditunjukkan sebelumnya
Mulai ulang Nginx
$ sudo systemctl reload nginx
Pada langkah selanjutnya, kita akan menguji apakah server kita dapat meng-server halaman HTTP/2
Langkah 3 – Menguji Jika HTTP/2 diaktifkan
Sekarang mari kita uji apakah HTTP berjalan dan diaktifkan di server web Nginx kami
Di terminal Anda, jalankan perintah di bawah ini
curl -I -L https://your_domain
Dalam kasus kami, itu akan menjadi
curl -I -L https://crazytechgeek.info
Keluaran
Atau, Anda dapat memverifikasi HTTP/2 dengan membuka alat pengembang Google dengan menekan
Ctrl + Shift + I
Selanjutnya, klik Network
Tab.
Dalam Protocol
kolom, pastikan untuk menemukan label h2
Langkah 4 – Menerapkan Keamanan Transportasi Ketat HTTP
Terakhir, meskipun kami tahu dengan sangat jelas bahwa server kami dapat mengalihkan permintaan HTTP ke HTTPS, kami ingin mengaktifkan HSTS HTTP Strict Transport Security untuk menghilangkan pengalihan tersebut. Jika browser kebetulan menemukan header HSTS, browser tidak akan mencoba menyambung ke server lagi untuk jangka waktu tertentu. TI hanya akan bertukar data melalui protokol HTTPS yang aman dan terenkripsi.
Untuk mencapai ini, Buka file konfigurasi Nginx
$ vim /etc/nginx/nginx.conf
Tambahkan baris di bawah
add_header Strict-Transport-Security "max-age=15768000" always;
max-age
disetel dalam hitungan detik
Jika situs Anda memiliki subdomain, dan Anda ingin menerapkan HSTS ke semuanya, tambahkan includeSubDomains
bendera di akhir baris
add_header Strict-Transport-Security "max-age=15768000; includeSubDomains" always;
Simpan dan keluar dari file konfigurasi.
Seperti biasa, periksa apakah ada kesalahan
$ sudo nginx -t
Akhirnya, mulai ulang Nginx
$ sudo systemctl restart nginx
Kesimpulan
Pada titik ini, server Nginx Anda sekarang melayani halaman HTTP/2.
Anda juga dapat mengunjungi https://tools.keycdn.com/http2-test
untuk menguji status HTTP/2 situs Anda seperti yang ditunjukkan
Atau, Anda juga dapat mengunjungi situs ini
https://http2.pro/
Untuk hasil yang lebih detail, gunakan
https://www.ssllabs.com/ssltest/