Membatasi Akses Nginx Dengan HTTP Basic Auth

بِسْمِ اللهِ الرَّحْمٰنِ الرَّحِيْمِ

Hai teman….
tau ga ternyata kita bisa membatasi akses ke website kita dengan memberikan user dan password otentifikasi. User dan password ini didapat dari sebuah file yang dibuat dari tool terkenal seperti apache2-utils.

HTTP basic auth dapat juga dipadukan dengan metode pembatas akses lainnya. Misalnya membatasi akses berdasarkan alamat atau geographical location.

Sek sek bahasanya agak ribet, kita buat mudah aja ya, jadi gini dengan basic auth kita bisa membatasi akses menujut website kita, ketika kita membuka alamat website kita akan muncul popup meminta username dan password nah kalo bener baru dah tuh bisa kebuka isinya, kalo salah maka akan muncul pesan error, like gini:

lucu kaan. 😙

Nah untuk membuatnya kita perlu install toolsnya dulu yaitu:

  • apache2-utils untuk debian sekeluarga.

    sudo apt install -y apache2-utils
    
  • httpd-tools untuk RedHat sekeluarga.

    sudo yum install httpd-tools
    

Buat Passwordnya

  1. Untuk membuat password pertama kali menggunakan perintah htpasswd diikuti dengan flag -c lalu pertama dan nama usernya pada argument kedua.

    sudo htpasswd -c /etc/nginx/.htpasswd batutah
    
  2. Untuk membuat user lain pada file yang sama hilangkan flag -c

    sudo htpasswd /etc/nginx/.htpasswd batutah2
    
  3. Kita bisa memastikan hasilnya dengan melihat isi file yang kita buat tadi.

    cat /etc/nginx/.htpasswd
    

isinya bakal kayak gini

batutah:$apr1$/woC1jnP$KAh0SsVn5qeSMjTtn0E9Q0
batutah2:$apr1$QdR8fNLT$vbCEEzDj7LyqCMyNpSoBh/

Config Server Block Nginx

  1. Masuk ke lokasi server block yang ingin kita tambahkan basic authnya, lalu tambahkan baris seperti berikut:
server {
  ...
  auth_basic           "Administrator’s Area";
  auth_basic_user_file /etc/nginx/.htpasswd;

  location /public/ {
      auth_basic off;
  }
}

Untuk menambahkan basic auth pada path tertentu seperti /api/documentation tujuannya agar ketika mengakses halaman api documentation harus memasukkan basic auth, dan tidak berimbas pada endpoint API lainnya.

    location /api/documentation {
          auth_basic  "Administrator’s Area";
          auth_basic_user_file /etc/nginx/.htpasswd;

          try_files $uri $uri/ /index.php?$query_string;
    }

Atau seperti ini kalau menggukanan reverse proxy

    location /api/documentation {
          auth_basic  "Administrator’s Area";
          auth_basic_user_file /etc/nginx/.htpasswd;

          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header Host $host;
          #proxy_set_header X-Forwarded-Proto $schema;
          proxy_pass http://127.0.0.1:21180;
    }

baris auth_basic untuk meletakakkan dimana popup akan muncul untuk menanyakan username password. bisa diletakkan pada baris server atau juga di baris aplikasi auth_basic_user_file /etc/nginx/.htpasswd; ini fullpath file basic auth yang kita buat tadi

Udah deh jadi. yeay… 😬


05 Februari 2019
09:37 WIB
Cibubur, Jakarta Timur
DKI Jakarta

comments powered by Disqus