NGINX HTTP Basic Authentication 모듈 디렉토리 인증 암호 설정 방법

NGINX

NGINX로 웹서비스를 구동할때 특정 디렉토리 하위 페이지를 HTTP 인증 레벨에서 로그인 설정을 한 다음 권한이 있는 사용자에게만 접근을 허용할 수 있습니다.

이 방식은 보안을 필요로 하는 페이지나 워드프레스 같은 CMS의 로그인 환경을 이중으로 보호하는데 사용할 수 있습니다.

nginx HTTP Basic Authentication 01 1

NGINX HTTP Basic Authentication 설정

NGINX에서 HTTP 프로토콜을 통한 인증을 구현하는 ngx_http_auth_basic_module 모듈이 설치되어 있어야 하며 일반적으로 패키지를 통한 설치를 했다면 기본적으로 포함되어 있습니다.

기본 문법

http {
   auth_basic "message"; # 로그인 팝업창 메시지
   auth_basic_user_file /etc/nginx/.htpasswd; # 로그인시 필요한 사용자 계정과 비밀번호 정보 파일
}

각 문법에 대한 기능은 위의 주석과 같으며 http { } 블럭에 위와 같이 설정할 경우 모든 가상호스트의 접근에 HTTP 인증을 요구합니다.

도메인 접근시 로그인

server {
   listen 80;
   server_name localhost;
   auth_basic            "접근을 제한합니다.";
   auth_basic_user_file  /etc/nginx/.htpasswd;
   location / {
   ...
   }
}

가상호스트 레벨에서 웹페이지 전체에 대한 HTTP 인증을 설정하고 싶다면 server { } 블럭에 위와 같이 설정합니다. 위와 같이 설정할 경우 http://localhost 하위의 모든 페이지는 HTTP 인증을 요구합니다.

특정 페이지 접근시 로그인

server {
   listen 80;
   server_name localhost;
   location / {
   ...
   }
   location /admin/ {
      auth_basic            "접근을 제한합니다.";
      auth_basic_user_file  /etc/nginx/.htpasswd;
   }
}

특정 페이지에만 HTTP 인증을 설정하고 싶다면 위와 같이 location { } 블럭에 설정합니다.

.htpasswd 파일 설정

사용자의 ID와 암호를 정보가 담긴 .htpasswd 파일은 아이디:패스워드 와 같은 구조로 만들어야 하는데 패스워드는 MD5로 암호화가 되어 있어야 합니다.

패드워드를 암호화해서 저장하는 방법은 간단하게 openssl을 사용하는 방법과 아파치 유틸리티(htpasswd)를 이용하는 방법이 있습니다.

htpasswd로 사용자와 패스워드 설정

root@SERVER:/# apt-get install apache2-utils
root@SERVER:/# htpasswd -cm /etc/nginx/.htpasswd test
New password:
Re-type new password:
Adding password for user test
root@SERVER:/#

아파치 유틸리티가 설치되어 있지 않다면 설치한 다음 두번째와 같이 htpasswd 명령어로 test 라는 계정에 대한 비밀번호를 지정합니다.

root@SERVER:/# htpasswd -m /etc/nginx/.htpasswd apple
New password:
Re-type new password:

-c 옵션은 새로운 파일을 생성하는데 필요한 명령어 이므로 두번째 계정 설정부터는 -c 옵션을 뺀 다음 명령어를 입력해서 인증에 필요한 계정을 설정합니다.

test:$apr1$SMGr7CI3$bSNkhorr9foTkOu8fGgDZ1
apple:$apr1$qcL9L700$ZxlRcOYuLez3a8TPcJgLD0
mango:$apr1$fULRAQ4f$KUqpnPeubjl.fNKheGnSQ1

.htpasswd 파일을 편집기로 열어보면 위처럼 패스워드가 암호화로 저장되어 있는 것을 확인할 수 있습니다.

openSSL로 사용자와 패스워드 설정

웹서버라면 기본적으로 openssl이 설치되어 있기 때문에 추가적으로 패키지를 설치하지 않아도 된다는 장점이 있습니다.

root@SERVER:/# openssl passwd -1
Password:
Verifying - Password:
$1$4PxZW35L$U8eGi12vYe2e8aNwkf17m0

위와 같은 명령어를 통해 비밀번호로 사용할 텍스트를 입력하면 위와 같은 암호화된 텍스트를 반환합니다.

root@SERVER:/# vim /etc/nginx/.htpasswd
test:$1$4PxZW35L$U8eGi12vYe2e8aNwkf17m0

/etc/nginx/.htpasswd 파일을 에디터로 수동으로 생성해 아이디와 암호화된 비밀번호를 입력합니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

Fill out this field
Fill out this field
유효한 이메일 주소를 입력해주세요.

nginx title 03
NGINX WebDAV 설정 방법
WebDAV(Web Distributed Authoring and Versioning)는 http를 이용해 웹서버에 저장되어 있는 파일을 여러 사용자가 편집하기 위해 고안된 프로토콜입니다. 실제로는 FTP 대용으로…
windows nginx php setting title
윈도우 NGINX PHP 연동 및 서비스 등록 방법
이전 포스트에서 윈도우에 NGINX를 설치하고 서비스에 등록하는 방법까지 알아봤는데요. NGINX를 개발 환경 또는 웹서버 환경으로 만들기 위해서 PHP를 설치해야 하는…