
HTTP 기본 인증으로 액세스 제한하기
NGINX Plus 의 HTTP 기본 인증을 사용하여 액세스를 제어하고, 선택적으로 IP 주소 기반 액세스 제어와 결합할 수 있습니다.
목차
1. 소개
2. 전제 조건
3. 비밀번호 파일 생성
4. HTTP 기본 인증을 위한 NGINX 및 NGINX Plus 구성하기
5. 기본 인증과 IP 주소별 액세스 제한을 결합
6. 전체 예제
1. 소개
사용자 이름/비밀번호 인증을 구현하여 웹사이트 또는 웹사이트의 일부에 대한 액세스를 제한할 수 있습니다. 사용자명과 비밀번호는 비밀번호 파일 생성 도구(예: apache2-utils
)를 사용하여 생성하고 채워진 파일에서 가져옵니다.
HTTP 기본 인증은 IP 주소
나 Geographical Location
로 액세스를 제한하는 등 다른 액세스 제한 방법과 결합할 수도 있습니다.
2. 전제 조건
- NGINX Plus 또는 NGINX Open Source
- 비밀번호 파일 생성 유틸리티(예:
apache2-utils
(Debian, Ubuntu) 또는httpd-tools
(RHEL/CentOS/Oracle Linux)).
3. 비밀번호 파일 생성
사용자명-비밀번호 쌍을 만들려면 비밀번호 파일 생성 유틸리티(예: apache2-utils
또는 httpd-tools
)를 사용합니다.
1. apache2-utils
(Debian, Ubuntu) 또는 httpd-tools
(RHEL/CentOS/Oracle Linux)가 설치되어 있는지 확인합니다.
2. 비밀번호 파일과 첫 번째 사용자를 만듭니다. -c
플래그(새 파일을 만들려면)를 사용하고 파일 경로명을 첫 번째 인수로, 사용자 이름을 두 번째 인수로 사용하여 htpasswd
유틸리티를 실행합니다.
$ sudo htpasswd -c /etc/apache2/.htpasswd user1
Enter 키를 누르고 메시지가 표시되면 user1
의 비밀번호를 입력합니다.
3. 사용자-비밀번호 쌍을 추가로 생성합니다. 파일이 이미 존재하므로 -c
플래그를 생략합니다.
$ sudo htpasswd /etc/apache2/.htpasswd user2
4. 파일에 페어링된 사용자 이름과 해시된 비밀번호가 포함되어 있는지 확인할 수 있습니다.
$ cat /etc/apache2/.htpasswd
user1:$apr1$/woC1jnP$KAh0SsVn5qeSMjTtn0E9Q0
user2:$apr1$QdR8fNLT$vbCEEzDj7LyqCMyNpSoBh/
user3:$apr1$Mr5A0e.U$0j39Hp5FfxRkneklXaMrr/
4. HTTP 기본 인증을 위한 NGINX 및 NGINX Plus 구성하기
1. 보호하려는 위치 내에서 auth_basic
지시문을 지정하고 비밀번호로 보호되는 영역의 이름을 지정합니다. 이 영역의 이름은 자격 증명을 요청할 때 사용자 이름/비밀번호 대화창에 표시됩니다.
location /api {
auth_basic "Administrator’s Area";
#...
}
2. 사용자/비밀번호 쌍이 포함된 .htpasswd 파일 경로와 함께 auth_basic_user_file
지시문을 지정합니다.
location /api {
auth_basic "Administrator’s Area";
auth_basic_user_file /etc/apache2/.htpasswd;
}
또는 기본 인증으로 전체 웹사이트에 대한 액세스를 제한하되 일부 웹사이트 영역은 공개할 수 있습니다. 이 경우 상위 구성 수준에서 상속을 취소하는 auth_basic
지시문의 off
매개변수를 지정합니다.
server {
...
auth_basic "Administrator’s Area";
auth_basic_user_file conf/htpasswd;
location /public/ {
auth_basic off;
}
}
5. 기본 인증과 IP 주소별 액세스 제한을 결합
HTTP 기본 인증은 IP 주소별 액세스 제한과 효과적으로 결합할 수 있습니다. 최소 두 가지 시나리오를 구현할 수 있습니다.
- 사용자는 인증되고 유효한 IP 주소가 있어야 합니다.
- 사용자는 인증되었거나 유효한 IP 주소를 가지고 있어야 합니다.
1. allow
및 deny
지시문을 사용하여 특정 IP 주소로부터의 액세스를 허용하거나 거부합니다.
location /api {
#...
deny 192.168.1.2;
allow 192.168.1.1/24;
allow 127.0.0.1;
deny all;
}
192.168.1.1.2
주소를 제외한 192.168.1.1/24
네트워크에 대해서만 접근 권한이 부여됩니다. allow
및 deny
지시문은 정의된 순서대로 적용된다는 점에 유의하세요.
2. IP 및 HTTP 인증에 의한 제한을 satisfy
지시문과 결합합니다. 지시문을 all
로 설정하면 클라이언트가 두 조건을 모두 충족하면 접근 권한이 부여됩니다. 지시문을 any
로 설정하면 클라이언트가 하나 이상의 조건을 충족하면 액세스가 허용됩니다.
location /api {
#...
satisfy all;
deny 192.168.1.2;
allow 192.168.1.1/24;
allow 127.0.0.1;
deny all;
auth_basic "Administrator’s Area";
auth_basic_user_file conf/htpasswd;
}
6. 전체 예제
이 예는 간단한 인증과 IP 주소별 액세스 제한을 결합하여 상태 영역을 보호하는 방법을 보여줍니다.
http {
server {
listen 192.168.1.23:8080;
root /usr/share/nginx/html;
location /api {
api;
satisfy all;
deny 192.168.1.2;
allow 192.168.1.1/24;
allow 127.0.0.1;
deny all;
auth_basic "Administrator’s Area";
auth_basic_user_file /etc/apache2/.htpasswd;
}
}
}
상태 페이지에 액세스하면 로그인하라는 메시지가 표시됩니다.

제공된 이름과 비밀번호가 비밀번호 파일과 일치하지 않으면 401(Authorization Required
) 오류가 발생합니다.