🎀 요구사항 (Requirements)
Spring Security 로그인 구현 전, 임시로 HTTP Basic Authorization을 적용하려고 합니다. NGINX와 HTTP Basic 인증 방식으로 접근을 제한하는 방법에 대해 정리해 보았습니다. 이 글은 NGINX가 설치된 환경을 전제로 하며, NGINX를 처음 다루는 분이 읽기에 적합합니다.
🍡 해결방법 (Solution or Next step)
1. HTTP Basic 인증을 적용할 디렉토리로 이동
cd /etc/nginx/conf.d
- cd [경로]
`cd`는 Linux 명령어 중 change directory를 뜻하며, 디렉토리를 변경하기 위한 명령어로 사용됩니다. `cd`를 작성하고 공백을 한 칸 띄운 다음, 암호 저장을 위한 경로를 입력해 주세요. 제 경우에는 /etc/nginx/conf.d 경로에 설정하겠습니다. 앞으로 나올 /etc/nginx/conf.d 부분에 해당되는 경로로 바꿔서 입력해 주시면 됩니다.
2. 암호 파일 생성
$ sudo htpasswd -c /etc/nginx/conf.d/.htpasswd user
- sudo htpasswd -c [경로] [사용자 이름]
암호 파일은 `사용자 이름-비밀번호`가 쌍으로 생성됩니다. 맨 뒤에 붙는 user는 사용자 이름을 의미합니다. user 말고 다른 것으로 입력하셔도 됩니다.
"New password:"가 뜨면 비밀번호를 입력하시고 엔터를 눌러주세요. "Re-type new password:"가 나타나면 한 번 더 같은 비밀번호를 입력하시면 됩니다. 엔터를 누르시면 추가한 사용자 이름으로 추가되었다는 메시지가 노출됩니다.
3. 생성된 파일 확인
$ cat /etc/nginx/conf.d/.htpasswd
user:$apr1$/woC1jnP$KAh0SsVn5qeSMjTtn0E9Q0
- cat [경로]/.htpasswd
`cat`은 Linux 명령어 중 concatenate를 뜻하며, 멀티플레이어 역할을 맡고 있습니다. 여기서는 파일 내용을 출력하는 역할로 사용됩니다. 사용자 이름과 비밀번호를 확인해 주세요. 비밀번호는 암호화되어서 보입니다. 여기서 사용된 사용자 이름과 비밀번호로 HTTP Basic 인증을 할 것입니다.
4. HTTP Basic 인증할 conf 파일 내용 편집
sudo vi /etc/nginx/conf.d/example.conf
- sudo vi [경로]/[파일명]
conf 파일명이 `example.conf`라고 가정하겠습니다. conf 파일 내용을 편집하려면 Linux 명령어 중 vi를 사용하면 되는데요, vi 명령어로 파일을 열게 되면 readonly로 열기 때문에 sudo vi로 사용해 주어야 합니다.
location / {
auth_basic "example message";
auth_basic_user_file /etc/nginx/conf.d/.htpasswd;
}
- auth_basic "메시지";
- auth_basic_user_file [사용자 계정과 비밀번호가 있는 암호파일];
conf 파일 중간에 HTTP Basic 인증을 적용할 부분에 위의 내용을 작성해 주세요. 작성이 끝난 후 `:wq` 명령어를 입력하면 수정이 완료됩니다. 하단의 내용은 참고용으로 봐주세요.
❗ 참고사항
server {
...
auth_basic "example message";
auth_basic_user_file /etc/nginx/conf.d/.htpasswd;
location /example {
auth_basic off;
}
}
- auth_basic off;
만약, 특정 URI에서 HTTP Basic 인증을 해제하고 싶다면, `auth_basic off;`를 적용해 주세요. 하단의 내용은 완성된 conf 파일 예시입니다.
🚀 예제 코드
http {
server {
listen 192.168.1.23:8080;
root /usr/share/nginx/html;
location / {
auth_basic "example message";
auth_basic_user_file /etc/nginx/conf.d/.htpasswd;
}
}
}
5. NGINX 변경사항 적용
sudo nginx -s reload
NGINX 변경사항을 적용하기 위한 명령어입니다.
6. HTTP Basic 인증으로 로그인하기
위의 내용에서 설정한 사용자 이름과 비밀번호를 입력한 뒤, [로그인] 버튼을 클릭하면 사이트에 접근 가능합니다. 사용자 이름과 비밀번호가 일치하지 않거나, [취소] 버튼을 누르면 다음과 같이 401 Authorization Required 에러가 발생합니다.
🍹 회고 (Retrospective)
어쩌면 미래의 제가 이 글을 다시 볼 일이 있을 것 같아서 정리했습니다. 초보 개발자분들에게 이 글이 도움이 되었으면 하네요. 저처럼 모르면 사용하기 두려울 수 있습니다. 알고 나면 쉬운 내용입니다.
NGINX에 대해 살짝 맛만 본 것이 벌써 2년 전이네요. NGINX를 다룰 일이 잘 없었다 보니, 모르는 부분이 많았습니다. 이번 기회에 NGINX와 HTTP Basic Authorization 이 무엇인지부터 찾아보았습니다. 그런데 설명하려고 하면 참 어려운 것 같습니다. 개념적인 내용을 다루느라 시간이 좀 걸렸는데, 위 내용을 적용하는 데는 30분도 채 안 걸렸네요.
안 그래도 인프라와 네트워크 지식에 약했는데, 모르는 것보다 잘못 알고 있는 것이 장기적으로 위험하다고 느끼는 요즘입니다. 본문에 수정해야 하거나 빠진 내용이 있다면 댓글로 말씀해 주세요.
🍈 참고자료 (References)
- NGINX Docs, "Restricting Access with HTTP Basic Authentication", https://docs.nginx.com/nginx/admin-guide/security-controls/configuring-http-basic-authentication/, (2021.11.17.)
- MDN Web Docs, "HTTP 인증", https://developer.mozilla.org/ko/docs/Web/HTTP/Authentication, (2021.11.17.)
- 이동욱, 『스프링 부트와 AWS로 혼자 구현하는 웹 서비스』, 프리렉(2020), p385-p386
'Issues' 카테고리의 다른 글
Java | JDK 8에서 JDK 11로 버전 변경하기 (0) | 2021.12.07 |
---|---|
JavaScript/jQuery | show()와 hide()로 토글 기능 만들기 (0) | 2021.12.02 |
PuTTY | Permission denied (publickey,gssapi-keyex,gassapi-with-mic) 해결 (0) | 2021.11.25 |
PuTTY | PEM 파일에서 PPK 파일로 변환하는 방법과 format too new 해결 (0) | 2021.11.17 |
JavaScript/jQuery | select box 비활성화 후 Ajax로 값 넘기기 (0) | 2021.11.07 |
댓글