Mengalihkan HTTP ke HTTPS di Nginx

Saya sedang mengujicoba pemasangan sertifikat SSL pada website klien yang dihosting dalam Nginx. Setelah berhasil diverifikasi kalau koneksi HTTPSnya lancar jaya maka tahap selanjutnya adalah mulai mengalihkan trafik pengunjung yang biasa (HTTP) ke yang diamankan (HTTPS). Solusinya menurut saya malah lebih sederhana dan elegan dibandingkan Apache dan OpenLiteSpeed.

Ya, ternyata sangat mudah sekali. Silahkan edit konfigurasi virtual host websitenya, kalau masih default berarti ada di /etc/nginx/conf.d/:

nano /etc/nginx/conf.d/servernesia.com

Jangan lupa sesuaikan apa nama file konfigurasi virtual hostnya ya, diatas cuma contoh saja. 🙂

Dan kemudian adaptasikan blok server didalamnya dengan kode berikut:

server {
       listen         80;
       server_name    servernesia.com www.servernesia.com;
       return         301 https://$server_name$request_uri;
}

Ya, tidak perlu pengenalan pola url dengan regex tapi cukup Nginx akan mengembalikan versi HTTPS dari halaman yang diminta. Juga diberi kode 301 yang menandakan redirect url ini bersifat permanen, jadi Google akan mengenali url barunya dan menggantikannya dalam hasil perncarian. Jadi bagi yang khawatir akan masalah indeks dan SEO sudah aman disini. Oh ya, tentu gantikan isi server_name dengan nama domain anda ya.

Semoga bermanfaat. 🙂

12 Comments

  1. mas chandra, setelah redirect dari HTTP ke HTTPS apa perlu juga dibuatkan satu lagi server blok untuk redirect dari https://servernesia.com ke https://servernesia.com (https dengan www ke https non www).
    trims.

    1. Kalau mbak tiru persis blok kode diatas tidak perlu mbak, sudah diantisipasi 2 format url: www dan non-www dan nanti dikembalikan versi HTTPS yang mbak setting.

      1. Hmm… cuma beda metode saja mbak. Kalau dalam blok diatas kan sudah dideteksi dari server_name masuknya formatnya apa dan keduanya diredirect ke versi HTTPS.

        Hati – hati ada HSTSnya yang di link itu. 😀

  2. Halo mas chandra,
    saya agak bingung dengan redirect ini 😀 berikut konfigurasi default.conf yang saya pakai :

    server {
        listen       80;
        server_name  domain.com www.domain.com;
        return       301 https://domain.com$request_uri;
    }
    
    server {
        listen       443 ssl http2;
        server_name  domain.com;
        .............

    nah saat saya cek dengan perintah :

    curl -I http://www.domain.com

    muncul notif :

    curl: (6) Couldn't resolve host 'www.domain.com'

    apa ada yang terlewat ya mas untuk konfigurasi server di atas?
    trims.

    1. solved. ternyata saya lupa setting DNS 😀
      yang saya setting cuma A record untuk domain.com (tanpa WWW), saya tambahkan lagi satu A record untuk WWW masalah selesai.

      cuma sekarang saya bisa akses HTTPS dengan WWW dan non-WWW, lagi coba cari2 cara redirect dari HTTPS WWW ke HTTPS non-WWW

      1. update. solved untuk redirect dari HTTPS WWW ke HTTPS non-WWW
        memang harus ditambahkan satu server block lagi, jadi ada tiga server block, berikut penampakannya :

        server {
        listen 80;
        server_name domain.com www.domain.com;
        return 301 https://domain.com$request_uri;
        }
        
        server {
        listen 443 ssl http2;
        server_name www.domain.com;
        return 301 https://domain.com$request_uri;
        }
        
        server {
        listen 443 ssl http2;
        server_name domain.com;
        ………….
        }

        #tanyasendiri_jawabsendiri 🙁 😀

      2. Ahaha… 😀 Tapi asyiknya disana lho mbak, ada masalah dan bisa solve sendiri.

        Nanti saya cek redirect HTTPS punya saya, ingat saya kok ga sebanyak itu ya. 😀

      3. Sedikit koreksi untuk A record www saya ganti ke cname, lupa ini pelajaran pertama dari mas chandra dulu 😀

      4. Hehe… memang pengalaman itu guru terbaik mbak. Kalau ga ngalamin sendiri tips sebagus apapun kadang belum nyambung. 🙂

  3. malem mas,
    tanya lg mas, ini di server saya ada bbrp domain dan dari bbrp domain tersebut ada yang saya pasang https [LE] dan ada yang tidak.
    saya coba iseng akses domain yang tidak saya pake ssl dengan saya tambahkan parameter https://, domainnya bsa di akses dan muncul https://domaintanpahttps.biz di urlnya tapi tampilan yang nongol salah satu web yang memang ada https nya bukan website sesuai url yang dimaksudkan (ex:http://domaintanpahttps.biz)..

    salahnya dmn ya mas kira2?? saya coba cek file .conf domain tanpa https tidak ada yang merujuk ke domain yang menggunakan https..

    trims sblmnya mas

Tinggalkan Balasan ke Chandra Batalkan balasan

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