{"id":9,"date":"2026-06-08T01:54:25","date_gmt":"2026-06-08T01:54:25","guid":{"rendered":"https:\/\/skyssh.net\/?p=9"},"modified":"2026-06-08T02:09:51","modified_gmt":"2026-06-08T02:09:51","slug":"cara-redirect-http-ke-https-di-nginx","status":"publish","type":"post","link":"http:\/\/skyssh.net\/?p=9","title":{"rendered":"Cara Redirect HTTP ke HTTPS di Nginx"},"content":{"rendered":"<h1 class=\"fw-800 display-4\" style=\"font-weight: 800; font-size: 2.5rem; color: #4361ee; margin-bottom: 15px;\">Cara Redirect HTTP ke HTTPS di Nginx<\/h1>\n<p class=\"lead opacity-75\" style=\"color: #64748b; font-size: 1.1rem; margin-bottom: 40px;\">Arsitektur Keamanan Web: Implementasi Server Block Redirect 301, Konfigurasi Catch-All, Aktivasi Kebijakan HSTS, dan Validasi Protokol SSL<\/p>\n<div class=\"intro-content\">\n<p style=\"text-align: justify; color: #1e293b; line-height: 1.8;\">\n        Dalam ekosistem jaringan modern, implementasi protokol <strong>HTTPS (Hypertext Transfer Protocol Secure)<\/strong> 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.\n    <\/p>\n<p style=\"text-align: justify; color: #1e293b; line-height: 1.8;\">\n        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**.\n    <\/p>\n<\/div>\n<div style=\"background: #fff9db; border-left: 6px solid #fab005; padding: 20px; border-radius: 15px; color: #856404; margin: 30px 0; font-size: 14px;\">\n    <i class=\"fas fa-lock\" style=\"margin-right: 8px;\"><\/i><br \/>\n    <strong>Prasyarat Utama:<\/strong> Sebelum mengaktifkan redirect, pastikan server Anda telah memiliki sertifikat SSL yang valid. Jika belum, pasang certbot Let&#8217;s Encrypt secara instan lewat perintah terminal: <br \/>\n    <code style=\"background: #e2e8f0; color: #4361ee; padding: 2px 5px; border-radius: 4px; display: inline-block; margin-top: 5px;\">sudo apt install certbot python3-certbot-nginx -y &amp;&amp; sudo certbot --nginx -d suryassh.net -d www.suryassh.net<\/code>\n<\/div>\n<h2 style=\"font-weight: 800; color: #4361ee; margin-top: 50px; margin-bottom: 25px;\"><i class=\"fas fa-shuffle\" style=\"margin-right: 10px;\"><\/i> 1. Metode Standar Pemisahan Blok Server (Sangat Direkomendasikan)<\/h2>\n<p style=\"color: #1e293b; text-align: justify;\">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:<\/p>\n<div style=\"position: relative;\">\n    <button onclick=\"copyCode(this)\" style=\"position: absolute; right: 10px; top: 10px; background: rgba(255,255,255,0.1); border: 1px solid rgba(255,255,255,0.2); color: #fff; padding: 4px 10px; font-size: 11px; border-radius: 6px; cursor: pointer; font-weight: 700; z-index: 100;\">SALIN<\/button><\/p>\n<pre style=\"background: #1e293b; color: #e2e8f0; padding: 25px; border-radius: 15px; font-size: 14px; overflow-x: auto;\"><code># BLOK 1: Menangkap trafik HTTP biasa (Port 80) untuk dilempar ke HTTPS\nserver {\n    listen 80;\n    server_name suryassh.net www.suryassh.net;\n\n    # Mengembalikan pengalihan permanen 301 dengan menjaga keutuhan string path URI\n    return 301 https:\/\/$server_name$request_uri;\n}\n\n# BLOK 2: Blok Pemrosesan Utama Website Aman (Port 443)\nserver {\n    listen 443 ssl http2;\n    server_name suryassh.net www.suryassh.net;\n\n    # Jalur Sertifikat SSL Let's Encrypt\n    ssl_certificate \/etc\/letsencrypt\/live\/suryassh.net\/fullchain.pem;\n    ssl_certificate_key \/etc\/letsencrypt\/live\/suryassh.net\/privkey.pem;\n\n    root \/var\/www\/suryassh.net;\n    index index.html index.php;\n\n    location \/ {\n        try_files $uri $uri\/ \/index.php?$args;\n    }\n}<\/code><\/pre>\n<\/div>\n<div style=\"border: 2px solid #e2e8f0; border-radius: 25px; padding: 30px; margin-top: 40px; background: #ffffff;\">\n    <span style=\"background: #1e1b4b; color: white; padding: 6px 20px; border-radius: 50px; font-size: 11px; font-weight: 800; text-transform: uppercase;\">Multi-Domain Environment<\/span><\/p>\n<h3 style=\"font-weight: 700; color: #1e293b; margin-top: 15px; font-size: 1.4rem;\">2. Metode Pengalihan Massal (Catch-All Global Redirect)<\/h3>\n<p style=\"color: #64748b; text-align: justify;\">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 (<code>_<\/code>):<\/p>\n<div style=\"position: relative;\">\n        <button onclick=\"copyCode(this)\" style=\"position: absolute; right: 10px; top: 10px; background: rgba(255,255,255,0.1); border: 1px solid rgba(255,255,255,0.2); color: #fff; padding: 4px 10px; font-size: 11px; border-radius: 6px; cursor: pointer; font-weight: 700; z-index: 100;\">SALIN<\/button><\/p>\n<pre style=\"background: #1e293b; color: #e2e8f0; padding: 25px; border-radius: 15px; font-size: 14px; overflow-x: auto;\"><code>server {\n    listen 80 default_server;\n    server_name _; # Menangkap seluruh domain yang mengarah ke IP server ini\n\n    # Otomatis mengalihkan ke host pengirim asli harian\n    return 301 https:\/\/$host$request_uri;\n}<\/code><\/pre>\n<\/p><\/div>\n<\/div>\n<h2 style=\"font-weight: 800; color: #4361ee; margin-top: 50px; margin-bottom: 25px;\"><i class=\"fas fa-user-shield\" style=\"margin-right: 10px;\"><\/i> 3. Pengetatan Sektor Keamanan Menggunakan Aturan HSTS<\/h2>\n<p style=\"color: #1e293b; text-align: justify;\">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:<\/p>\n<div style=\"position: relative;\">\n    <button onclick=\"copyCode(this)\" style=\"position: absolute; right: 10px; top: 10px; background: rgba(255,255,255,0.1); border: 1px solid rgba(255,255,255,0.2); color: #fff; padding: 4px 10px; font-size: 11px; border-radius: 6px; cursor: pointer; font-weight: 700; z-index: 100;\">SALIN<\/button><\/p>\n<pre style=\"background: #1e293b; color: #e2e8f0; padding: 25px; border-radius: 15px; font-size: 14px; overflow-x: auto;\"><code># Sisipkan baris instruksi proteksi ini di dalam block server port 443 Anda\nadd_header Strict-Transport-Security \"max-age=31536000; includeSubDomains; preload\" always;\nadd_header X-Frame-Options \"SAMEORIGIN\" always;\nadd_header X-Content-Type-Options \"nosniff\" always;\nadd_header X-XSS-Protection \"1; mode=block\" always;<\/code><\/pre>\n<\/div>\n<div style=\"border: 2px solid #e2e8f0; border-radius: 25px; padding: 30px; margin-top: 40px; background: #ffffff;\">\n    <span style=\"background: #4361ee; color: white; padding: 6px 20px; border-radius: 50px; font-size: 11px; font-weight: 800; text-transform: uppercase;\">Verification<\/span><\/p>\n<h3 style=\"font-weight: 700; color: #1e293b; margin-top: 15px; font-size: 1.4rem;\">4. Protokol Pengujian Keberhasilan Pengalihan Rute<\/h3>\n<p style=\"color: #64748b; text-align: justify;\">Setelah mengubah file vhost, pastikan Anda selalu menguji validitas kode sebelum memuat ulang daemon Nginx, dilanjutkan dengan memverifikasi header respons menggunakan utilitas `curl`:<\/p>\n<div style=\"position: relative;\">\n        <button onclick=\"copyCode(this)\" style=\"position: absolute; right: 10px; top: 10px; background: rgba(255,255,255,0.1); border: 1px solid rgba(255,255,255,0.2); color: #fff; padding: 4px 10px; font-size: 11px; border-radius: 6px; cursor: pointer; font-weight: 700; z-index: 100;\">SALIN<\/button><\/p>\n<pre style=\"background: #1e293b; color: #e2e8f0; padding: 25px; border-radius: 15px; font-size: 14px; overflow-x: auto;\"><code># 1. Validasi sintaks berkas Nginx\nsudo nginx -t\n\n# 2. Jika sukses (test is successful), muat ulang konfigurasi web server\nsudo systemctl reload nginx\n\n# 3. Uji respons header port HTTP dari komputer luar\ncurl -I http:\/\/suryassh.net<\/code><\/pre>\n<\/p><\/div>\n<p style=\"color: #64748b; margin-top: 15px; text-align: justify;\"><strong>Indikator Sukses:<\/strong> Output terminal Anda wajib menampilkan status baris <code style=\"color: #22c55e; font-weight: bold;\">HTTP\/1.1 301 Moved Permanently<\/code> diikuti dengan baris penunjuk lokasi baru bertuliskan <code style=\"color: #4361ee; font-weight: bold;\">Location: https:\/\/suryassh.net\/<\/code>.<\/p>\n<\/div>\n<h2 style=\"font-weight: 800; color: #4361ee; margin-top: 50px; margin-bottom: 25px;\"><i class=\"fab fa-wordpress\" style=\"margin-right: 10px;\"><\/i> 5. Sinkronisasi Tambahan untuk Aplikasi Web WordPress<\/h2>\n<p style=\"color: #1e293b; text-align: justify;\">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*):<\/p>\n<div style=\"border: 1px solid #e2e8f0; border-radius: 20px; padding: 25px; margin-bottom: 20px; background: #ffffff;\">\n<h5 style=\"font-weight: 700; color: #1e293b; margin-top: 0; font-size: 1rem;\">A. Modifikasi Berkas Rahasia wp-config.php<\/h5>\n<div style=\"position: relative;\">\n        <button onclick=\"copyCode(this)\" style=\"position: absolute; right: 10px; top: 10px; background: rgba(255,255,255,0.1); border: 1px solid rgba(255,255,255,0.2); color: #fff; padding: 4px 10px; font-size: 11px; border-radius: 6px; cursor: pointer; font-weight: 700; z-index: 100;\">SALIN<\/button><\/p>\n<pre style=\"background: #1e293b; color: #e2e8f0; padding: 15px; border-radius: 10px; font-size: 13.5px; overflow-x: auto;\"><code># Tambahkan baris kode deklarasi HTTPS proxy global ini di bagian atas berkas:\ndefine('FORCE_SSL_ADMIN', true);\ndefine('WP_HOME', 'https:\/\/suryassh.net');\ndefine('WP_SITEURL', 'https:\/\/suryassh.net');\n\nif ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') {\n    $_SERVER['HTTPS'] = 'on';\n}<\/code><\/pre>\n<\/p><\/div>\n<\/div>\n<div style=\"border: 1px solid #e2e8f0; border-radius: 20px; padding: 25px; background: #ffffff;\">\n<h5 style=\"font-weight: 700; color: #1e293b; margin-top: 0; font-size: 1rem;\">B. Pembersihan Tautan Kaku pada Tabel SQL Database<\/h5>\n<p style=\"color: #64748b; font-size: 14px; text-align: justify;\">Guna membasmi peringatan *Mixed Content Warning* (halaman HTTPS memuat gambar bertipe HTTP), tuangkan query SQL pengganti tautan massal berikut di phpMyAdmin Anda:<\/p>\n<div style=\"position: relative;\">\n        <button onclick=\"copyCode(this)\" style=\"position: absolute; right: 10px; top: 10px; background: rgba(255,255,255,0.1); border: 1px solid rgba(255,255,255,0.2); color: #fff; padding: 4px 10px; font-size: 11px; border-radius: 6px; cursor: pointer; font-weight: 700; z-index: 100;\">SALIN<\/button><\/p>\n<pre style=\"background: #1e293b; color: #e2e8f0; padding: 15px; border-radius: 10px; font-size: 13.5px; overflow-x: auto;\"><code>UPDATE wp_posts SET post_content = REPLACE(post_content, 'http:\/\/suryassh.net', 'https:\/\/suryassh.net');\nUPDATE wp_posts SET guid = REPLACE(guid, 'http:\/\/suryassh.net', 'https:\/\/suryassh.net');<\/code><\/pre>\n<\/p><\/div>\n<\/div>\n<div style=\"background: #f1f5f9; border-radius: 20px; padding: 30px; margin-top: 60px;\">\n<h5 style=\"font-weight: 700; margin-bottom: 15px; color: #1e293b;\"><i class=\"fas fa-exclamation-triangle\" style=\"margin-right: 8px;\"><\/i> Pelacakan Gangguan Terintegrasi Masalah Port 80 Tidak Merespons<\/h5>\n<p style=\"font-size: 13px; color: #64748b; margin-bottom: 15px;\">Jika pasca pembaruan berkas website Anda malah macet atau menolak koneksi saat dipanggil via HTTP biasa, lakukan langkah audit fungsional port berikut:<\/p>\n<ul style=\"margin-bottom: 0; font-size: 14px; color: #475569; line-height: 1.8; padding-left: 20px;\">\n<li><strong>Validasi Soket Pengendali Port Server:<\/strong> Pastikan sistem Nginx Anda benar-benar sedang mendengarkan (*listening*) instruksi pada gerbang port 80 lewat CLI perintah terminal: <br \/><code style=\"background: #e2e8f0; color: #4361ee; padding: 1px 5px; border-radius: 4px;\">sudo netstat -tulpn | grep :80<\/code>.<\/li>\n<li><strong>Periksa Kuncian Dinding Api Firewall (UFW):<\/strong> Sering kali setelan vhost sudah 100% sempurna namun diblokir oleh dinding proteksi internal VPS Linux Anda. Jalankan perintah pembuka otorisasi akses: <br \/><code style=\"background: #e2e8f0; color: #ef4444; padding: 1px 5px; border-radius: 4px;\">sudo ufw allow 80\/tcp &amp;&amp; sudo ufw reload<\/code> untuk memastikan gerbang luar terbuka merata.<\/li>\n<li><strong>Pastikan Tidak Ada Overlap Aplikasi Lain:<\/strong> 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.<\/li>\n<\/ul>\n<\/div>\n<p><script>\nfunction copyCode(button) {\n    const preElement = button.nextElementSibling;\n    const codeText = preElement.querySelector('code').innerText;<\/p>\n<p>    const tempTextArea = document.createElement('textarea');\n    tempTextArea.value = codeText;\n    document.body.appendChild(tempTextArea);\n    tempTextArea.select();\n    document.execCommand('copy');\n    document.body.removeChild(tempTextArea);<\/p>\n<p>    button.innerText = 'TERSALIN!';\n    button.style.background = '#22c55e';<\/p>\n<p>    setTimeout(() => {\n        button.innerText = 'SALIN';\n        button.style.background = 'rgba(255,255,255,0.1)';\n    }, 2000);\n}\n<\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>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,<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[5],"class_list":["post-9","post","type-post","status-publish","format-standard","hentry","category-tutorial","tag-nginx"],"_links":{"self":[{"href":"http:\/\/skyssh.net\/index.php?rest_route=\/wp\/v2\/posts\/9","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/skyssh.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/skyssh.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/skyssh.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/skyssh.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=9"}],"version-history":[{"count":1,"href":"http:\/\/skyssh.net\/index.php?rest_route=\/wp\/v2\/posts\/9\/revisions"}],"predecessor-version":[{"id":11,"href":"http:\/\/skyssh.net\/index.php?rest_route=\/wp\/v2\/posts\/9\/revisions\/11"}],"wp:attachment":[{"href":"http:\/\/skyssh.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=9"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/skyssh.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=9"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/skyssh.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=9"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}