Cara Konfigurasi SSL dan HTTP/3 Nginx di Ubuntu 24.04
Lalu lintas web membutuhkan performa tinggi dengan latency rendah. HTTP/3 menyelesaikan masalah koneksi lambat dengan mengganti TCP dengan protokol QUIC yang berjalan di atas UDP. Nginx mainline kini mendukung HTTP/3 secara native, memungkinkan pengiriman konten yang lebih cepat dan koneksi yang lebih andal untuk pengguna Anda.
Requirementsโ
Sebelum memulai proses instalasi dan konfigurasi, pastikan Anda memenuhi kriteria berikut:
- Akses root atau user dengan hak akses
sudo. - Domain aktif (misalnya
example.com) yang A record-nya sudah diarahkan ke IP server Anda. - Server tidak mengaktifkan web server lain (seperti Apache) di port 80 dan 443.
Lingkungan Pengujianโ
Dokumentasi ini menggunakan lingkungan instalasi dengan rincian berikut:
- OS: Ubuntu 24.04 LTS
- Web Server: Nginx versi 1.31.2
- SSL Tool: Certbot 2.9.0
Catatan: Ubuntu 24.04 secara default menyediakan Nginx versi 1.24.0. Karena dukungan HTTP/3 baru stabil di versi Nginx 1.25.0 ke atas, kita akan menggunakan repository resmi Nginx mainline (1.31.2).
Menambahkan Repository Nginx Mainlineโ
Langkah pertama adalah menghapus versi Nginx lama (jika ada) dan menambahkan repository Nginx mainline ke daftar package manager.
โ ๏ธ Peringatan: Jika Anda melakukan migrasi pada server produksi, perintah penghapusan di bawah ini akan menghentikan web server Anda. Pastikan Anda memiliki jadwal maintenance sebelum menjalankannya.
# Menghapus instalasi nginx versi lama
sudo apt-get remove --purge nginx nginx-common nginx-core -y
sudo apt-get autoremove -y
Selanjutnya, tambahkan key dari Nginx dan daftarkan repository resmi ke OS Ubuntu Anda:
sudo apt-get update
sudo apt-get install -y curl gnupg2 ca-certificates lsb-release ubuntu-keyring
# Menambahkan signing key Nginx
curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
# Mendaftarkan repository Nginx mainline khusus untuk Ubuntu noble (24.04)
echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/mainline/ubuntu noble nginx" | sudo tee /etc/apt/sources.list.d/nginx.list
Instalasi Nginx dan Certbot di Ubuntu 24.04โ
Setelah repository mainline berhasil ditambahkan, jalankan perintah instalasi berikut untuk memasang Nginx terbaru dan Certbot:
sudo apt-get update
sudo apt-get install -y nginx certbot python3-certbot-nginx
Periksa versi Nginx yang baru saja Anda install:
nginx -v
Output:
nginx version: nginx/1.31.2
Mulai service Nginx dan pastikan berjalan saat server booting:
sudo systemctl enable --now nginx
Cara Mendapatkan Certificate SSL dari Let's Encryptโ
Sebelum mengaktifkan HTTP/3, Anda memerlukan koneksi HTTPS aktif. Kita akan generate sertifikat SSL secara otomatis menggunakan Certbot.
Jalankan perintah ini dengan mengganti example.com dengan nama domain Anda:
sudo certbot --nginx -d example.com -d www.example.com
Ikuti panduan di layar untuk memasukkan alamat email Anda dan menyetujui syarat layanan dari Let's Encrypt. Certbot akan secara otomatis mengedit konfigurasi Nginx dan memuat ulang service tersebut agar sertifikat SSL segera aktif.
Cara Konfigurasi SSL dan HTTP/3 Nginx di Ubuntu 24.04โ
Setelah Anda memiliki certificate SSL, langkah selanjutnya adalah cara konfigurasi SSL dan HTTP/3 Nginx di Ubuntu 24.04. HTTP/3 menggunakan port 443 UDP, berbeda dengan HTTP/1.1 atau HTTP/2 yang menggunakan TCP. Oleh karena itu, kita harus mengaktifkan QUIC di Nginx.
Buka file konfigurasi Nginx untuk domain Anda dengan text editor pilihan Anda:
# Menggunakan nano:
nano /etc/nginx/conf.d/example.com.conf
# Menggunakan vim:
vim /etc/nginx/conf.d/example.com.conf
Jika Certbot memodifikasi konfigurasi default Anda, file tersebut biasanya berada di /etc/nginx/conf.d/default.conf.
Tambahkan atau ubah blok server untuk mengaktifkan quic dan header Alt-Svc. Berikut adalah contoh konfigurasi ideal untuk mendukung HTTP/3:
server {
# Konfigurasi IPv4 dan IPv6 untuk TCP (HTTP/1.1 dan HTTP/2)
listen 443 ssl;
listen [::]:443 ssl;
# Konfigurasi IPv4 dan IPv6 untuk UDP (HTTP/3 via QUIC)
listen 443 quic reuseport;
listen [::]:443 quic reuseport;
server_name example.com www.example.com;
# Lokasi file SSL dari Certbot
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
# Hanya aktifkan TLS versi terbaru untuk keamanan terbaik
ssl_protocols TLSv1.3;
# Beritahu browser bahwa server ini mendukung HTTP/3 di port 443
add_header Alt-Svc 'h3=":443"; ma=86400';
location / {
root /usr/share/nginx/html;
index index.html index.htm;
# Tambahkan header keamanan dasar
add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options DENY;
}
}
Pastikan Anda hanya mendefinisikan reuseport pada satu baris konfigurasi listen 443 quic jika Anda memiliki beberapa domain dalam satu server yang sama. Jika Anda memiliki blok server kedua untuk domain lain, cukup tulis listen 443 quic; tanpa parameter tambahan.
Pengujian Fungsionalโ
Simpan file yang baru Anda buat, lalu cek syntax konfigurasi Nginx untuk memastikan tidak ada kesalahan:
sudo nginx -t
Output:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Jika tidak ada masalah dalam pengecekan, restart service web server:
sudo systemctl restart nginx
Membuka Port UDP di Firewallโ
Protokol QUIC menggunakan port 443 dengan transport UDP. Secara standar, firewall di Linux biasanya hanya membuka koneksi TCP. Anda wajib mengizinkan traffic UDP agar fungsi ini dapat berjalan.
โ ๏ธ Peringatan: Salah mengetik command ufw berisiko memblokir koneksi SSH Anda sendiri. Pastikan port 22 TCP (SSH) juga sudah diizinkan sebelum Anda mengaktifkan ufw.
Izinkan traffic TCP dan UDP untuk port web:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 443/udp
sudo ufw reload
Verifikasiโ
Langkah terakhir adalah memastikan server Anda benar-benar merespons dengan protokol HTTP/3 kepada client.
Gunakan utility CLI curl yang sudah mendukung standar HTTP/3. Panggil alat bantu ini dari mesin lokal Anda atau dari server lain (jangan memanggil dari server Nginx yang sama agar routing lebih alami):
curl -I --http3 https://example.com
Perhatikan output header HTTP. Pastikan Anda melihat respons dengan protokol HTTP/3 berserta status 200:
HTTP/3 200
server: nginx/1.31.2
date: Tue, 30 Jun 2026 03:00:00 GMT
content-type: text/html
content-length: 615
last-modified: Tue, 30 Jun 2026 02:00:00 GMT
alt-svc: h3=":443"; ma=86400
Selain curl di command line, Anda juga bisa memverifikasi koneksi ini langsung menggunakan browser seperti Google Chrome atau Firefox:
- Buka halaman web Anda di browser.
- Buka jendela Developer Tools (tombol F12).
- Pindah ke tab Network.
- Muat ulang halaman situs Anda.
- Pada tabel "Protocol", pastikan koneksi tertulis sebagai
h3yang menandakan lalu lintas berjalan lewat protokol HTTP/3.
Troubleshootingโ
Berikut adalah panduan penyelesaian masalah yang paling sering ditemui sesudah mengikuti langkah demi langkah konfigurasi ini:
Gejala Umum: Browser Tetap Menggunakan Protokol h2โ
Kemungkinan Penyebab: Seringkali masalah ini muncul akibat konfigurasi firewall (seperti UFW atau Security Group provider cloud) yang belum mengizinkan port 443 untuk lalu lintas UDP. Browser modern otomatis menggunakan HTTP/2 (TCP) apabila jalur QUIC diblokir oleh sistem keamanan jaringan.
Diagnostik: Periksa status konfigurasi firewall lokal Anda:
sudo ufw status
Perbaikan: Jika port UDP absen dari daftar aturan iptables, tambahkan izin menggunakan arahan ini:
sudo ufw allow 443/udp
Verifikasi:
Jalankan tes menggunakan browser ulang di tab Network untuk memeriksa kembalinya status h3.
Gejala Umum: Nginx Menolak Memulai Serviceโ
Kemungkinan Penyebab:
Web server gagal berjalan dengan pesan error berupa duplicate listen options pada address yang sama. Ini karena parameter reuseport terpasang lebih dari satu kali di banyak file.
Diagnostik: Jalankan tes pengecekan konfigurasi Nginx:
sudo nginx -t
Anda akan melihat output error seperti: nginx: [emerg] duplicate listen options for [::]:443.
Perbaikan:
Edit konfigurasi virtual host tambahan Anda, temukan teks listen 443 quic reuseport; dan buang kata reuseport. Cukup gunakan format listen 443 quic; untuk blok server berikutnya di IP yang sama.
Verifikasi: Setelah menghapus teks duplikasi tersebut, restart Nginx dan amati status layanannya beroperasi secara normal:
sudo systemctl restart nginx
sudo systemctl status nginx
Gejala Umum: Error Parameter "quic" Tidak Validโ
Kemungkinan Penyebab: Parameter konfigurasi HTTP/3 belum didukung oleh Nginx versi standar yang dibawa package manager. Ubuntu 24.04 secara default menggunakan versi lama yang baru stabil dalam hal fitur-fitur versi dasar.
Diagnostik:
Reload file konfigurasi akan menghasilkan keluaran ini: invalid parameter "quic" in /etc/nginx/conf.d/default.conf.
Perbaikan: Periksa detail versi build software di dalam sistem:
nginx -v
Jika versi yang dicetak adalah 1.24 atau di bawahnya, artinya instalasi Anda membutuhkan rilis yang lebih baru. Tambahkan repository mainline Nginx ke paket sistem, lalu upgrade dengan mengeksekusi perintah sudo apt-get upgrade nginx.
Verifikasi: Lihat kembali log build dan pastikan versi 1.31 atau lebih tinggi sudah running.
Gejala Umum: Limit Let's Encrypt Terlampauiโ
Kemungkinan Penyebab: Anda mencoba proses permohonan sertifikat SSL berulang kali hingga menyentuh batas / limit yang ditetapkan provider.
Diagnostik:
Output program Certbot akan menyebut pesan kegagalan secara jelas: too many certificates already issued for exact set of domains.
Perbaikan:
Gunakan opsi --staging dalam format command CLI selama melakukan pengetesan generatel SSL, atau ubah sub-domain sebelum melakukan tes di tahap produksi.
Verifikasi: Eksekusi Certbot kembali dan pastikan permohonan certificate SSL berhasil diproses tanpa pesan blokir dari Let's Encrypt.
