Nginx에서 기본 HTTP 인증을 구성하는 방법


기본 HTTP 인증은 간단한 사용자 이름/비밀번호 인증을 설정하여 웹 사이트/애플리케이션 또는 그 일부에 대한 액세스를 제한하는 보안 메커니즘입니다. 기본적으로 전체 HTTP 서버, 개별 서버 블록 (Apache의 가상 호스트) 또는 위치 블록을 보호하는 데 사용할 수 있습니다.

이름에서 알 수 있듯이 이것은 신뢰할 수있는 안전한 방법이 아닙니다. 보다 안정적인 다른 보안 조치와 함께 사용해야합니다. 예를 들어 웹 애플리케이션이 HTTP에서 실행중인 경우 사용자 자격 증명이 일반 텍스트로 전송되므로 HTTPS 활성화를 고려해야합니다.

이 가이드의 목적은 작지만 유용한 보안 계층을 추가하여 웹 애플리케이션에서 개인/권한이있는 콘텐츠 (예 : 관리자 측에 국한되지 않음)를 보호하는 것입니다. 아직 개발 단계에있는 웹 사이트 나 응용 프로그램에 대한 액세스를 차단하는 데 사용할 수도 있습니다.

  1. Install LEMP Stack in CentOS/RHEL 7
  2. Install LEMP Stack in Ubuntu/Debian

HTTP 인증 사용자 파일 생성

먼저 사용자 이름 : 암호 쌍을 저장할 파일을 만들어야합니다. 이 파일을 만들기 위해 Apache HTTP Server의 htpasswd 유틸리티를 사용합니다.

먼저 htpasswd 유틸리티를 제공하는 패키지 인 apache2-utils 또는 httpd-tools가 시스템에 설치되어 있는지 확인하고, 그렇지 않으면 배포판에 적절한 명령을 실행하여 설치합니다.

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

그런 다음 아래의 htpasswd 명령을 실행하여 첫 번째 사용자로 암호 파일을 만듭니다. -c 옵션은 암호 파일을 지정하는 데 사용됩니다. [Enter]를 누르면 사용자 암호를 입력하라는 메시지가 표시됩니다.

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

두 번째 사용자를 추가하고 여기에서 -c 옵션을 사용하지 마십시오.

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

이제 암호 파일이 준비되었으므로 액세스를 제한 할 웹 서버 부분을 구성하십시오. 암호 파일 내용 (사용자 이름 및 암호화 된 암호 포함)을 보려면 아래 cat 명령을 사용하십시오.

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

Nginx에 대한 HTTP 인증 구성

앞서 언급했듯이 웹 서버, 단일 웹 사이트 (서버 블록 사용) 또는 위치 지시문에 대한 액세스를 제한 할 수 있습니다. 이를 위해 두 가지 유용한 지시문을 사용할 수 있습니다.

  • auth_basic – turns on validation of user name and password using the “HTTP Basic Authentication” protocol.
  • auth_basic_user_file – specifies the password file.

모든 서버 블록에 적용되는 전체 웹 서버에 대한 기본 인증을 구현하려면 /etc/nginx/nginx.conf 파일을 열고 http 컨텍스트에 아래 행을 추가하십시오.

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

특정 도메인 또는 하위 도메인에 대한 기본 인증을 사용하려면 /etc/nginx/conf.d/ 또는/etc/nginx/conf/sites-available (Nginx 설치 방법에 따라 다름)에서 구성 파일을 연 다음 "서버 블록 또는 컨텍스트에서 아래 구성 :

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

위치 지시문 내에서 기본 인증을 활성화 할 수도 있습니다. 아래 예에서는 /admin 위치 블록에 액세스하려는 모든 사용자에게 인증을 요청합니다.

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
	}
	……..
}

기본 HTTP 인증을 구성한 경우 웹 서버 나 하위 도메인 또는 사이트의 특정 부분에 액세스하려는 모든 사용자 (구현 한 위치에 따라 다름)는 아래 스크린 샷에 표시된대로 사용자 이름과 비밀번호를 입력해야합니다. ".

사용자 인증에 실패한 경우 아래와 같이“401 Authorization Required”오류가 표시됩니다.

기본 HTTP 인증으로 액세스 제한에서 자세한 정보를 찾을 수 있습니다.

다음의 유용한 Nginx HTTP 서버 관련 가이드를 읽고 싶을 수도 있습니다.

  1. How to Password Protect Web Directories in Nginx
  2. The Ultimate Guide to Secure, Harden and Improve Performance of Nginx
  3. Setting Up HTTPS with Let’s Encrypt SSL Certificate For Nginx

이 가이드에서는 Nginx HTTP 웹 서버에서 기본 HTTP 인증을 구현하는 방법을 보여주었습니다. 질문이 있으시면 아래 피드백 양식을 사용하십시오.