Beranda / Tutorial / Cara Redirect HTTP ke HTTPS di Nginx

Cara Redirect HTTP ke HTTPS di Nginx

Cara Redirect HTTP ke HTTPS di Nginx

Arsitektur Keamanan Web: Implementasi Server Block Redirect 301, Konfigurasi Catch-All, Aktivasi Kebijakan HSTS, dan Validasi Protokol SSL

Dalam ekosistem jaringan modern, implementasi protokol HTTPS (Hypertext Transfer Protocol Secure) sudah menjadi standardisasi mandatori yang tidak bisa ditawar lagi. Keberadaan ikon gembok hijau di peramban browser bukan sekadar pemanis visual, melainkan jaminan bahwa seluruh lalu lintas data biner antara pengguna dan server VPS Anda telah terisolasi dengan enkripsi berlapis. Selain melindungi dari aksi intersepsi data, HTTPS berdampak langsung pada skor optimasi SEO Google serta membangun kredibilitas situs.

Namun, pengunjung akan selalu mencoba mengakses website Anda menggunakan skema HTTP biasa (port 80), baik karena kebiasaan lama maupun tautan usang. Jika Nginx tidak dikonfigurasi untuk menangkap request tersebut dan mengalihkannya otomatis ke HTTPS (port 443), situs Anda akan dinilai cacat dari sisi sekuritas. Panduan komprehensif ini akan membedah taktik menyusun instruksi pengalihan rute permanen (*301 Redirect*) di Nginx, penataan arsitektur multi-domain, hingga penyuntikkan header keamanan ketat **HSTS**.


Prasyarat Utama: Sebelum mengaktifkan redirect, pastikan server Anda telah memiliki sertifikat SSL yang valid. Jika belum, pasang certbot Let’s Encrypt secara instan lewat perintah terminal:
sudo apt install certbot python3-certbot-nginx -y && sudo certbot --nginx -d suryassh.net -d www.suryassh.net

1. Metode Standar Pemisahan Blok Server (Sangat Direkomendasikan)

Ini adalah pendekatan terbaik yang dianjurkan oleh dokumentasi resmi Nginx demi menjaga efisiensi performa web server. Kita memisahkan penangkap trafik port 80 dengan area pemrosesan utama port 443:

# BLOK 1: Menangkap trafik HTTP biasa (Port 80) untuk dilempar ke HTTPS
server {
    listen 80;
    server_name suryassh.net www.suryassh.net;

    # Mengembalikan pengalihan permanen 301 dengan menjaga keutuhan string path URI
    return 301 https://$server_name$request_uri;
}

# BLOK 2: Blok Pemrosesan Utama Website Aman (Port 443)
server {
    listen 443 ssl http2;
    server_name suryassh.net www.suryassh.net;

    # Jalur Sertifikat SSL Let's Encrypt
    ssl_certificate /etc/letsencrypt/live/suryassh.net/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/suryassh.net/privkey.pem;

    root /var/www/suryassh.net;
    index index.html index.php;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }
}
Multi-Domain Environment

2. Metode Pengalihan Massal (Catch-All Global Redirect)

Jika server VPS Anda menginang banyak domain sekaligus (*multi-domain*) dan Anda tidak ingin menulis file vhost satu per satu, manfaatkan instruksi *catch-all* menggunakan string tanda underscore (_):

server {
    listen 80 default_server;
    server_name _; # Menangkap seluruh domain yang mengarah ke IP server ini

    # Otomatis mengalihkan ke host pengirim asli harian
    return 301 https://$host$request_uri;
}

3. Pengetatan Sektor Keamanan Menggunakan Aturan HSTS

Untuk memitigasi serangan siber bertipe *SSL Strip / Downgrade Attack*, Anda wajib menyuntikkan header **HSTS (HTTP Strict Transport Security)**. Aturan ini memaksa peramban browser pengguna untuk selalu memanggil jalur HTTPS secara lokal tanpa perlu mengetuk port 80 terlebih dahulu harian:

# Sisipkan baris instruksi proteksi ini di dalam block server port 443 Anda
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
Verification

4. Protokol Pengujian Keberhasilan Pengalihan Rute

Setelah mengubah file vhost, pastikan Anda selalu menguji validitas kode sebelum memuat ulang daemon Nginx, dilanjutkan dengan memverifikasi header respons menggunakan utilitas `curl`:

# 1. Validasi sintaks berkas Nginx
sudo nginx -t

# 2. Jika sukses (test is successful), muat ulang konfigurasi web server
sudo systemctl reload nginx

# 3. Uji respons header port HTTP dari komputer luar
curl -I http://suryassh.net

Indikator Sukses: Output terminal Anda wajib menampilkan status baris HTTP/1.1 301 Moved Permanently diikuti dengan baris penunjuk lokasi baru bertuliskan Location: https://suryassh.net/.

5. Sinkronisasi Tambahan untuk Aplikasi Web WordPress

Jika website yang Anda beri rute pengalihan merupakan CMS WordPress, konfigurasi pada level Nginx saja belum cukup. Anda wajib menyelaraskan file konfigurasi inti dan basis data pangkalan data agar terhindar dari kendala lingkaran pengalihan tak berujung (*Redirect Loop*):

A. Modifikasi Berkas Rahasia wp-config.php

# Tambahkan baris kode deklarasi HTTPS proxy global ini di bagian atas berkas:
define('FORCE_SSL_ADMIN', true);
define('WP_HOME', 'https://suryassh.net');
define('WP_SITEURL', 'https://suryassh.net');

if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') {
    $_SERVER['HTTPS'] = 'on';
}

B. Pembersihan Tautan Kaku pada Tabel SQL Database

Guna membasmi peringatan *Mixed Content Warning* (halaman HTTPS memuat gambar bertipe HTTP), tuangkan query SQL pengganti tautan massal berikut di phpMyAdmin Anda:

UPDATE wp_posts SET post_content = REPLACE(post_content, 'http://suryassh.net', 'https://suryassh.net');
UPDATE wp_posts SET guid = REPLACE(guid, 'http://suryassh.net', 'https://suryassh.net');

Pelacakan Gangguan Terintegrasi Masalah Port 80 Tidak Merespons

Jika pasca pembaruan berkas website Anda malah macet atau menolak koneksi saat dipanggil via HTTP biasa, lakukan langkah audit fungsional port berikut:

  • Validasi Soket Pengendali Port Server: Pastikan sistem Nginx Anda benar-benar sedang mendengarkan (*listening*) instruksi pada gerbang port 80 lewat CLI perintah terminal:
    sudo netstat -tulpn | grep :80.
  • Periksa Kuncian Dinding Api Firewall (UFW): Sering kali setelan vhost sudah 100% sempurna namun diblokir oleh dinding proteksi internal VPS Linux Anda. Jalankan perintah pembuka otorisasi akses:
    sudo ufw allow 80/tcp && sudo ufw reload untuk memastikan gerbang luar terbuka merata.
  • Pastikan Tidak Ada Overlap Aplikasi Lain: Apabila Nginx memunculkan error *Address already in use* saat di-reload, artinya port 80 sedang dikuasai oleh web server lain seperti Apache atau sistem control panel (aaPanel/CWP). Matikan aplikasi kompetitor tersebut agar kendali port diserahkan utuh kepada Nginx.

Tag:

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *