GNU/Linux >> Belajar Linux >  >> Linux

Otentikasi HTTP Dasar dengan Nginx

Tutorial ini menunjukkan bagaimana Anda dapat menggunakan otentikasi HTTP dasar dengan Nginx untuk melindungi direktori dengan kata sandi di server Anda atau bahkan seluruh situs web. Ini adalah Nginx yang setara dengan autentikasi HTTP dasar di Apache dengan .htaccess /.htpasswd.

1 Catatan Awal

Saya menggunakan situs web www.example.com di sini dengan root dokumen /var/www/www.example.com/web/ dan file konfigurasi Nginx vhost /etc/nginx/sites-enabled/www.example.com. vhost. Direktori yang ingin saya lindungi sandi adalah /var/www/www.example.com/web/test/.

2 Membuat File Kata Sandi

Kami membutuhkan file kata sandi di mana pengguna yang seharusnya dapat masuk terdaftar dengan kata sandi mereka (dalam bentuk terenkripsi). Untuk membuat file kata sandi seperti itu, kita dapat menggunakan alat htpasswd Apache, atau kita menggunakan skrip Python dari http://trac.edgewall.org/browser/trunk/contrib/htpasswd.py.

2.1 Menggunakan Perintah htpasswd Apache

Jika Anda ingin menggunakan perintah htpasswd Apache, periksa apakah ada di sistem Anda:

which htpasswd
[email protected]:~# which htpasswd
/usr/bin/htpasswd
[email protected]:~#

Jika Anda mendapatkan output seperti di atas, semuanya baik-baik saja - htpasswd sudah diinstal. Jika perintah kembali tanpa keluaran apa pun, htpasswd tidak ada di sistem Anda, dan Anda harus menginstalnya. Di Debian/Ubuntu, ini adalah bagian dari paket apache2-utils yang dapat kita instal sebagai berikut:

apt-get -y install apache2-utils

Saya ingin membuat file kata sandi /var/www/www.example.com/.htpasswd sekarang dan menyimpan falko pengguna di dalamnya (Anda dapat memberi nama file kata sandi apa pun yang Anda suka - tidak perlu menamainya .htpasswd; saya beri nama saja .htpasswd karena itulah cara file kata sandi diberi nama di bawah Apache):

htpasswd -c /var/www/www.example.com/.htpasswd falko

Anda akan dimintai kata sandi untuk pengguna falko. Harap dicatat bahwa -c switch membuat file dibuat dari awal; jika tidak ada sebelumnya, itu akan dibuat; jika ada sebelumnya, itu akan ditimpa dengan yang baru, dan semua pengguna dari file lama akan hilang! Oleh karena itu, jika Anda ingin menambahkan pengguna lain tanpa menghapus semua pengguna yang ada, gunakan perintah htpasswd tanpa sakelar -c:

htpasswd /var/www/www.example.com/.htpasswd till

Perintah terakhir menambahkan pengguna hingga ke /var/www/www.example.com/.htpasswd sehingga kita sekarang memiliki pengguna falko dan hingga di dalamnya.

2.2 Menggunakan Skrip Python htpasswd.py

Jika Anda tidak ingin atau tidak dapat menggunakan perintah htpasswd Apache, Anda dapat menggunakan skrip Python dari http://trac.edgewall.org/browser/trunk/contrib/htpasswd.py.

Kami mengunduhnya ke /usr/local/bin dan membuatnya dapat dieksekusi sebagai berikut:

cd /usr/local/bin
wget http://trac.edgewall.org/export/14464/trunk/contrib/htpasswd.py
chmod 755 /usr/local/bin/htpasswd.py

Saya ingin membuat file kata sandi /var/www/www.example.com/.htpasswd sekarang dan menyimpan falko pengguna di dalamnya (Anda dapat memberi nama file kata sandi apa pun yang Anda suka - tidak perlu menamainya .htpasswd; saya beri nama saja .htpasswd karena itulah cara file kata sandi diberi nama di bawah Apache):

htpasswd.py -c -b /var/www/www.example.com/.htpasswd falko falkossecret

Silahkan ganti falkosecret dengan password untuk user falko. Harap dicatat bahwa -c switch membuat file dibuat dari awal; jika tidak ada sebelumnya, itu akan dibuat; jika ada sebelumnya, itu akan ditimpa dengan yang baru, dan semua pengguna dari file lama akan hilang! Oleh karena itu, jika Anda ingin menambahkan pengguna lain tanpa menghapus semua pengguna yang ada, gunakan perintah htpasswd.py tanpa sakelar -c:

htpasswd.py -b /var/www/www.example.com/.htpasswd till tillssecret

Perintah terakhir menambahkan pengguna hingga ke /var/www/www.example.com/.htpasswd sehingga kita sekarang memiliki pengguna falko dan hingga di dalamnya.

3 Konfigurasi Nginx

Sekarang setelah kita memiliki file kata sandi, kita hanya perlu menambahkannya ke konfigurasi Nginx vhost di /etc/nginx/sites-enabled/www.example.com.vhost, di dalam wadah {} server.

nano /etc/nginx/sites-enabled/www.example.com.vhost

Karena saya ingin melindungi sandi direktori pengujian di root dokumen, saya menggunakan lokasi /test {} di sini (untuk melindungi sandi seluruh situs web, Anda akan menggunakan lokasi / {}):

server {
       listen 80;
       server_name www.example.com example.com;
       root /var/www/www.example.com/web;
[...]
       location /test {
                auth_basic "Restricted";
                auth_basic_user_file /var/www/www.example.com/.htpasswd;
       }
[...]
}

Muat ulang Nginx setelahnya:

service nginx reload

Itu dia! Sekarang Anda dapat membuka direktori pengujian di browser (http://www.example.com/test), dan Anda akan dimintai nama pengguna dan sandi:

Jika Anda memasukkan nama pengguna dan sandi yang benar, Anda akan diberikan akses:

Jika tidak, Anda akan melihat pesan kesalahan 401 Otorisasi Diperlukan:

  • Nginx:http://nginx.org/
  • Wiki Nginx:http://wiki.nginx.org/
  • htpasswd.py Skrip Python:http://trac.edgewall.org/browser/trunk/contrib/htpasswd.py

Tentang Penulis

Falko Timme adalah pemilik dari Timme Hosting (hosting web nginx ultra-cepat). Dia adalah pengelola utama HowtoForge (sejak 2005) dan salah satu pengembang inti ISPConfig (sejak 2000). Dia juga berkontribusi pada buku O'Reilly "Linux System Administration".


Linux
  1. Mengarahkan HTTP ke HTTPS di NginX

  2. Izin File di Linux dengan Contoh

  3. Pemecahan masalah Nginx dasar

  1. nginx - 413 Permintaan Entitas Terlalu Besar

  2. Cara Menginstal HTTP Git Server dengan Nginx di Ubuntu 20.04

  3. nginx:[emerg] direktif tidak diketahui di /etc/nginx/sites-enabled/example.com:3

  1. Cara Menginstal HTTP Git Server Dengan Nginx di Ubuntu 16.04

  2. Cara Menginstal HTTP Git Server dengan Nginx di Debian 11

  3. Otentikasi Https Dengan Axel Downloader?