본문 바로가기
Issues

NGINX | HTTP Basic 인증으로 접근 제한하기

by YIAN 2021. 11. 26.

 

🎀 요구사항 (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)

 

 

댓글