NGINX에서 HTTP 기본 인증 설정 방법을 알아보고, 실습을 통해 쉽게 적용하고 사용할 수 있습니다.
NGINX HTTP Basic Authentication |
NGINX에서 HTTP 기본 인증 설정 방법을 알아보고, 실습을 통해 쉽게 적용하고 사용할 수 있습니다.
NGINX를 사용해서 웹 서비스를 사용하고 있을 경우 특정 URL이나 디렉터리를 HTTP 기본 인증을 통해 로그인을 성공한 사용자에게만 접근을 허용할 수 있습니다.
웹 서비스를 통해 전체 공개되지 않고, 특정 사용자에게만 필요한 CMS와 같이 컨텐츠 혹은 데이터 파일의 접속을 허용하는 경우 사용됩니다.
실습 환경
- 운영 체제(OS) : CentOS 8
- root 계정으로 실행
- IP 설정 및 인터넷이 가능한 환경
- nginx version: nginx/1.18.0
NGINX에서 HTTP 기본 인증을 사용하기 위해서 ngx_http_auth_basic_module 모듈을 사용하며, dnf나 yum을 사용해서 패키지로 설치 시 기본으로 추가되어 있습니다.
이 ngx_http_auth_basic_module 모듈은 HTTP 기본 인증 프로토콜을 사용하여 사용자 계정과 비밀번호를 검증하여 자원에 대한 접속를 제한 할 수 있습니다.
NGINX HTTP 모든 접속 시 로그인 요청 설정하기
http { } 블럭에 설정 시 모든 가상 호스트의 웹 페이지 접속 시 HTTP 기본 인증을 요구합니다.
[http { auth_basic "runit.cloud HTTP Basic Authentication"; # 로그인 팝업창에서 요청자 표시 내용 auth_basic_user_file /etc/nginx/.htpasswd; # 로그인 시 필요한 사용자 계정과 비밀번호가 저장된 파일 }]
도메인으로 접속 시 로그인 요청 설정하기
server { } 블럭에 설정 시 도메인의 웹 페이지 접속 시 HTTP 기본 인증을 요구합니다.
아래와 같이 설정시 test.runit.cloud 도메인으로 접속 시 HTTP 기본 인증을 요구합니다.
[server { listen 80; listen 443 ssl http2; server_name test.runit.cloud; auth_basic "runit.cloud HTTP Basic Authentication"; # 로그인 팝업창에서 요청자 표시 내용 auth_basic_user_file /etc/nginx/.htpasswd; # 로그인 시 필요한 사용자 계정과 비밀번호가 저장된 파일 location / { ... } }]
특정 페이지 접속 시 로그인 요청 설정하기
location { } 블럭에 설정 시 특정 페이지 접속 시 HTTP 기본 인증을 요구합니다.
아래와 같이 설정 시 test.runit.cloud/google 주소로 접속 시 HTTP 기본 인증을 요구합니다.
server { listen 80; listen 443 ssl http2; server_name test.runit.cloud; location / { ... (생략) } location /google { root /usr/local/src/; charset utf-8; auth_basic "runit.cloud HTTP Basic Authentication"; # 로그인 팝업창에서 요청자 표시 내용 auth_basic_user_file /etc/nginx/.htpasswd; # 로그인 시 필요한 사용자 계정과 비밀번호가 저장된 파일 autoindex on; # 디렉터리 파일 목록 표시 설정 autoindex_exact_size off; # 파일 용량 표시 숨김 설정 (on, off) autoindex_format html; # 인덱스 파일 표시 형식 설정 (html, xml, json, jsonp) autoindex_localtime on; # 인덱스 파일 로컬 시간 표시 설정 (on, off) } }
httpd-tools 설치하기
htpasswd 명령어를 사용하기 위해 httpd-tools 패키지를 먼저 설치합니다.
[dnf install httpd-tools -y]
[root@runit.cloud ~]# dnf install httpd-tools -y Last metadata expiration check: 12:51:53 ago on Sun 20 Dec 2020 02:14:25 AM KST. Installed Packages Name : httpd-tools Version : 2.4.37 Release : 30.module_el8.3.0+561+97fdbbcc Architecture : x86_64 Size : 195 k Source : httpd-2.4.37-30.module_el8.3.0+561+97fdbbcc.src.rpm Repository : @System From repo : appstream Summary : Tools for use with the Apache HTTP Server URL : https://httpd.apache.org/ License : ASL 2.0 Description : The httpd-tools package contains tools which can be used with : the Apache HTTP Server.
.htpasswd 파일 설정하기
사용자 계정과 비밀번호의 정보를 가지고 있는 .htpasswd 파일은 계정:패스워드 와 같은 구조로 이루어져 있습니다.
비밀번호를 암호화해서 저장하는 방법은 리눅스에 내장되어 있는 openssl을 사용하거나 아파치에서 제공하는 httpd-tools 패키지를 설치해서 사용할 수 있습니다.
htpasswd를 사용해서 사용자 계정과 비밀번호 설정하기
/etc/nginx/.htpasswd 파일을 생성하기 위해 -c 옵션을 사용하고, 추가 사용자를 생성할 경우 -c 옵션을 사용하지 않습니다.
아래 명령으로 test 계정을 추가합니다.
[htpasswd -cm /etc/nginx/.htpasswd test]
[root@runit.cloud ~]# htpasswd -cm /etc/nginx/.htpasswd test # test 계정 추가 New password: # test 계정 비밀번호 입력 Re-type new password: # 비밀번호 재입력 Adding password for user test
htpasswd 계정 생성하기 |
위 이미지와 같이 .htpasswd 파일을 cat 명령어로 열어보면 비밀번호가 암호화 된 것을 알 수 있습니다.
openssl 명령어로 사용자 계정과 비밀번호 설정하기
리눅스 서버에 기본적으로 openssl이 설치되어 있어 추가 설치가 필요하지 않습니다. 아래와 같이 사용할 비밀번호를 입력하면 암호화된 텍스트로 변환해서 보여줍니다.
[root@runit.cloud ~]# openssl passwd -1 Password: # 비밀번호 입력 Verifying - Password: # 비밀번호 재입력 $1$mDmfrV6J$iyDoGP.Vmbg6o7c5EXXON.
/etc/nginx/.htpasswd 파일에 vi 에디터를 사용해서 계정과 비밀번호를 입력 후 저장하면 HTTP 기본 인증에 사용할 수 있습니다.
[vi /etc/nginx/.htpasswd]
아래 암호화 코드를 복사해서 /etc/nginx/.htpasswd 파일에 저장합니다.
[test:$1$mDmfrV6J$iyDoGP.Vmbg6o7c5EXXON.]
HTTP 기본 인증 로그인 성공 페이지 |
마무리
NGINX에서 HTTP 기본 인증 설정 작업이 완료되었습니다.
간단한 로그인이 필요한 페이지나 사이트를 NGINX 설정을 통해 쉽게 설정할 수 있습니다.
COMMENTS