Lewati ke konten utama
๐Ÿš€ nusa.id cloud server linux indonesialihat paket

Cara Konfigurasi SSL dan HTTP/3 Nginx di Ubuntu 24.04

ยท 8 menit membaca

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:

  1. Buka halaman web Anda di browser.
  2. Buka jendela Developer Tools (tombol F12).
  3. Pindah ke tab Network.
  4. Muat ulang halaman situs Anda.
  5. Pada tabel "Protocol", pastikan koneksi tertulis sebagai h3 yang 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.