Nginx 단에서 HTTP 인증을 사용할 수 있는 설정이다.
HTTP 인증과 더불어 IP 접근 제한 등 다른 제한 수단과 함께 사용가능하다.
문법
location /api {
auth_basic “접근을 위해 인증이 필요합니다.”;
auth_basic_user_file ${PATH_NAME}/.htpasswd;
}
.htpasswd 파일은 md5로 암호화되어있는 id:password의 쌍으로 이루어진 파일이다.
파일 생성 방법으로 Docs에서는 apache2-utils (Debian, Ubuntu) 혹은 httpd-tools (RHEL/CentOS/Oracle Linux) 등 비밀번호 파일 생성 툴을 사용할 수 있다.
웹 서버의 경우 openssl로 암호화된 비밀번호를 얻을 수 있다.
(출처)
> openssl passwd -1
만약, 특정 location은 HTTP 인증을 사용하고 싶지 않다면 다음처럼 server 문에 auth_basic을 추가하고, auth_basic을 사용하고 싶지 않은 location 블록에 off를 명시한다.
server {
...
auth_basic “접근을 위해 인증이 필요합니다.”;
auth_basic_user_file conf/htpasswd;
location /public/ {
auth_basic off;
}
}
IP 주소 제한과 함께 사용하기
공식문서에서는 적어도 두 개의 조건에 IP 주소제한과 HTTP 인증을 함께 사용하면 유용하다고 소개한다.
- 사용자가 HTTP인증도 하는 동시에 유효한 IP로 접근해야만 허용
- 사용자가 HTTP인증을 통과하거나 또는 유효한 IP로 접근할 때 허용 (둘 중 하나만 만족)
위 조건을 구현하기 위해서 satisfy디렉티브를 사용한다.
# 1. 사용자가 HTTP인증도 하는 동시에 유효한 IP로 접근해야만 허용
location /api {
#...
satisfy all;
deny 192.168.1.2;
allow 192.168.1.1/24;
allow 127.0.0.1;
deny all;
auth_basic “접근을 위해 인증이 필요합니다.”;
auth_basic_user_file conf/htpasswd;
}
satisfy all로 설정하면 HTTP인증을 통과하는 동시에 유효한 IP로 접근해야만 접근을 허용한다.
# 2. 사용자가 HTTP인증을 통과하거나 또는 유효한 IP로 접근할 때 허용 (둘 중 하나만 만족)
location /api {
#...
satisfy any;
deny 192.168.1.2;
allow 192.168.1.1/24;
allow 127.0.0.1;
deny all;
auth_basic “접근을 위해 인증이 필요합니다.”;
auth_basic_user_file conf/htpasswd;
}
반대로 satisfy any로 설정하면 IP 접근 조건 혹은 HTTP 인증 조건 둘 중 하나만 만족하면 접근을 허용한다.
[NGINX Docs] Combine restriction by IP and HTTP authentication with the satisfy directive. If you set the directive to to all, access is granted if a client satisfies both conditions. If you set the directive to any, access is granted if if a client satisfies at least one condition:
설정이 완료되면 이제 HTTP 인증으로 접근할 수 있다.
참고
'Today I Learn > 인프라' 카테고리의 다른 글
Jenkins, Github Action으로 CI 환경 구축 경험기 (0) | 2021.11.13 |
---|---|
macOS iTerm2 zsh 설정하기 (0) | 2020.07.23 |
[2020-01-21] nginx로 next.js 앱 배포하기 (초보) (0) | 2020.01.21 |
[2020-01-07] ec2 Next.js Docker 배포 이슈 (0) | 2020.01.07 |