웹사이트 검색

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


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

추가 읽기: NGINX를 사용하여 이름 기반 및 IP 기반 가상 호스트(서버 블록)를 설정하는 방법

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

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

요구사항

  1. CentOS/RHEL 7에 LEMP 스택 설치
  2. Ubuntu/Debian에 LEMP 스택 설치

HTTP 인증 사용자 파일 생성

사용자 이름:비밀번호 쌍을 저장할 파일을 만드는 것부터 시작해야 합니다. Apache HTTP 서버의 htpasswd 유틸리티를 사용하여 이 파일을 생성합니다.

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

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

다음으로 아래의 htpasswd 명령을 실행하여 첫 번째 사용자의 비밀번호 파일을 생성합니다. -c 옵션은 passwd 파일을 지정하는 데 사용되며, [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 – 'HTTP 기본 인증 ' 프로토콜을 사용하여 사용자 이름과 비밀번호의 유효성을 검사합니다.
  • auth_basic_user_file – 비밀번호 파일을 지정합니다.

Nginx 가상 호스트를 비밀번호로 보호

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

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

Nginx 웹사이트 또는 도메인을 비밀번호로 보호

특정 도메인이나 하위 도메인에 대한 기본 인증을 활성화하려면 /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 /  {
		……..
	}
	……...
}

Nginx의 비밀번호 보호 웹 디렉토리

위치 지시어 내에서 기본 인증을 활성화할 수도 있습니다. 아래 예에서는 /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 AuthorizationRequire” 오류가 표시됩니다.

기본 HTTP 인증으로 액세스 제한에서 자세한 내용을 확인할 수 있습니다.

다음과 같은 유용한 Nginx HTTP 서버 관련 가이드를 읽어보는 것도 좋습니다.

  1. Nginx에서 웹 디렉터리를 비밀번호로 보호하는 방법
  2. Nginx의 성능을 보호, 강화 및 개선하기 위한 최고의 가이드
  3. Nginx용 Let's Encrypt SSL 인증서를 사용하여 HTTPS 설정

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