Wyszukiwanie w witrynie

Jak skonfigurować podstawowe uwierzytelnianie HTTP w Nginx


Podstawowe uwierzytelnianie HTTP to mechanizm bezpieczeństwa ograniczający dostęp do Twojej witryny/aplikacji lub niektórych jej części poprzez ustawienie prostego uwierzytelniania za pomocą nazwy użytkownika i hasła. Można go używać zasadniczo do ochrony całego serwera HTTP, poszczególnych bloków serwerów (hosty wirtualne w Apache) lub bloków lokalizacji.

Przeczytaj także: Jak skonfigurować wirtualne hosty oparte na nazwach i IP (bloki serwerów) za pomocą NGINX

Jak sama nazwa wskazuje, nie jest to bezpieczna metoda, na której można polegać; powinieneś używać go w połączeniu z innymi, bardziej niezawodnymi środkami bezpieczeństwa. Na przykład, jeśli Twoja aplikacja internetowa działa w oparciu o protokół HTTP, dane uwierzytelniające użytkownika są przesyłane w postaci zwykłego tekstu, dlatego warto rozważyć włączenie protokołu HTTPS.

Celem tego przewodnika jest pomoc w dodaniu małej, ale przydatnej warstwy zabezpieczeń w celu ochrony prywatnej/uprzywilejowanej zawartości w aplikacjach internetowych (takich jak między innymi strony administratora). Można go także użyć do zablokowania dostępu do strony internetowej lub aplikacji, która jest jeszcze w fazie rozwoju.

Wymagania

  1. Zainstaluj stos LEMP w CentOS/RHEL 7
  2. Zainstaluj stos LEMP w Ubuntu/Debianie

Utwórz plik użytkownika uwierzytelniania HTTP

Powinieneś zacząć od utworzenia pliku, w którym będą przechowywane pary nazwa użytkownika:hasło. Do utworzenia tego pliku użyjemy narzędzia htpasswd z serwera Apache HTTP Server.

Najpierw sprawdź, czy w Twoim systemie są zainstalowane apache2-utils lub httpd-tools, pakiety udostępniające narzędzie htpasswd, w przeciwnym razie uruchom odpowiednie polecenie swoją dystrybucję, aby ją zainstalować:

yum install httpd-tools		[RHEL/CentOS]
sudo apt install apache2-utils	[Debian/Ubuntu]

Następnie uruchom poniższe polecenie htpasswd, aby utworzyć plik haseł dla pierwszego użytkownika. Opcja -c służy do określenia pliku passwd. Po naciśnięciu [Enter] zostaniesz poproszony o podanie hasła użytkownika.

htpasswd -c /etc/nginx/conf.d/.htpasswd developer

Dodaj drugiego użytkownika i nie używaj tutaj opcji -c.

htpasswd /etc/nginx/conf.d/.htpasswd admin

Teraz, gdy masz już gotowy plik haseł, przejdź do konfiguracji części serwera internetowego, do których chcesz ograniczyć dostęp. Aby wyświetlić zawartość pliku haseł (w tym nazwy użytkowników i zaszyfrowane hasła), użyj poniższego polecenia cat.

cat /etc/nginx/conf.d/.htpasswd 

Skonfiguruj uwierzytelnianie HTTP dla Nginx

Jak wspomnieliśmy wcześniej, możesz ograniczyć dostęp do swojego serwera WWW, pojedynczej witryny internetowej (używając jej bloku serwera) lub dyrektywy lokalizacyjnej. Aby to osiągnąć, można zastosować dwie przydatne dyrektywy.

  • auth_basic – włącza weryfikację nazwy użytkownika i hasła przy użyciu protokołu „Podstawowe uwierzytelnianie HTTP”.
  • auth_basic_user_file – określa plik haseł.

Chroń hasłem wirtualne hosty Nginx

Aby zaimplementować podstawowe uwierzytelnianie dla całego serwera WWW, które dotyczy wszystkich bloków serwera, otwórz plik /etc/nginx/nginx.conf i dodaj poniższe linie w kontekście http:

http{
	auth_basic           "Restricted Access!";
    	auth_basic_user_file /etc/nginx/conf.d/.htpasswd; 
	……...
}

Chroń hasłem witrynę lub domenę Nginx

Aby włączyć podstawowe uwierzytelnianie dla konkretnej domeny lub subdomeny, otwórz jej plik konfiguracyjny w /etc/nginx/conf.d/ lub /etc/nginx/conf/sites-available (w zależności od tego, jak zainstalowałeś Nginx), a następnie dodaj poniższą konfigurację w bloku serwera lub kontekście:

server {
	listen 			80;
	server_name    	  example.com;
	auth_basic           	"Restricted Access!";
    	auth_basic_user_file 	/etc/nginx/conf.d/.htpasswd; 
	location /  {
		……..
	}
	……...
}

Zabezpiecz hasłem katalog internetowy w Nginx

Można także włączyć uwierzytelnianie podstawowe w ramach dyrektywy lokalizacyjnej. W poniższym przykładzie wszyscy użytkownicy próbujący uzyskać dostęp do bloku lokalizacji /admin zostaną poproszeni o uwierzytelnienie.

server {
	listen 			80;
	server_name    	example.com www.example.com;
	
	location / {
		……..
	}
	location /admin/ {
		auth_basic           	"Restricted Access!";
    		auth_basic_user_file 	/etc/nginx/conf.d/.htpasswd; 
	}

	location /public/{
		auth_basic  off;	#turns off basic http authentication off for this block
	}
	……..
}

Jeśli skonfigurowałeś podstawowe uwierzytelnianie HTTP, każdy użytkownik próbujący uzyskać dostęp do Twojego serwera WWW, subdomeny lub określonej części witryny (w zależności od tego, gdzie to zaimplementowałeś) zostanie poproszony o podanie nazwy użytkownika i hasła, jak pokazano na zrzucie ekranu poniżej .

W przypadku nieudanego uwierzytelnienia użytkownika zostanie wyświetlony błąd „Wymagana autoryzacja 401”, jak pokazano poniżej.

Więcej informacji można znaleźć w artykule dotyczącym ograniczania dostępu przy użyciu podstawowego uwierzytelniania HTTP.

Możesz także przeczytać poniższe przydatne przewodniki związane z serwerem Nginx HTTP.

  1. Jak chronić katalogi internetowe hasłem w Nginx
  2. Kompletny przewodnik po zabezpieczeniu, wzmocnieniu i poprawie wydajności Nginx
  3. Konfigurowanie protokołu HTTPS za pomocą certyfikatu Let’s Encrypt SSL dla Nginx

W tym przewodniku pokazaliśmy, jak wdrożyć podstawowe uwierzytelnianie HTTP na serwerze WWW Nginx HTTP. Aby zadać pytania, skorzystaj z poniższego formularza opinii.