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

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

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

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 파일을 에디터로 수동으로 생성해 아이디와 암호화된 비밀번호를 입력합니다.

같은 주제의 글

댓글

이메일 주소는 공개되지 않으며 댓글에 하나 이상의 URL이 포함될 경우 관리자 승인 후 공개됩니다.

댓글은 운영 정책에 따라 관리됩니다. (링크)