Nginx Basic 인증을 여러 페이지에 다른 사용자로 적용

처음에



이번에 하고 싶었던 것은, 표제대로.
Nginx의 Basic 인증을 여러 페이지에서 별도의 사용자 경로로 걸기

 페이지 A(page_a)에 대한 사용자(alpha) 경로
 페이지 B(page_b)에 유저(beta) 패스로 Basic 인증을 걸어,
페이지 A에서 사용자(beta) 페이지 B에 사용자(alpha)로는 인증을 할 수 없게 하고 싶다.

우선은 Basic 인증에 대해 정리해 보았습니다.

 

기본 인증



"Basic 인증"은 웹 사이트의 특정 페이지 및 파일에 액세스 제한을 적용 할 수있는 인증 방법 중 하나입니다.
Basic 인증을 하면, 인증을 거친 웹 사이트에 액세스하려고 할 때,
  인증 대화 상자가 시작되고 사용자 이름 (ID)과 암호를 입력하라는 메시지가 나타납니다.
간이적인 인증을 위해, 공개전의 WEB 사이트의 관계자만의 열람등의 목적으로도 사용할 수 있습니다.
 
 

도입 방법



이번은 OS는 linux로 Nginx는 도입이 끝난 것을 상정.
도입 방법은 여기

htpasswd 명령 설치


$ sudo yum install httpd-tools

 

.htpasswd 파일 만들기



사용자 이름과 비밀번호
$ sudo htpasswd -c /etc/nginx/.htpasswd alpha
 New password: alpha1
 Re-type new password: alpha1
 Adding password for user username

$ cat /etc/nginx/.htpasswd
alpha:$alpha1$1HL4gU0L$Sm5cgGBydSUV5uo9Z8aNe0

nginx 설정 파일 추가



Basic 인증과 .htpasswd 파일을 읽는 설명.
$vim /etc/nginx/nginx.conf
…
server {
    listen 80;
    root /usr/share/nginx/html;
    index index.html index.htm;

    location /page_a{

        #認証時に表示されるメッセージ
        auth_basic "Restricted";

        #.htpasswdファイルのパス
        auth_basic_user_file /etc/nginx/.htpasswd; 

        proxy_pass: http://127.0.0.1:8000;
    }
}
…

※proxy_pass는 잊어버리기 십상입니다만, gunicorn라든지 WSGI 사용하고 있으면 404 에러가 나옵니다.
 

재부팅


$sudo service nginx restart

이상으로 페이지 A(page_a)에는 Basic 인증이 걸렸습니다!
사이트에 접속하면 BASIC 인증이 걸려있는 것을 확인할 수 있습니다.


 

다른 페이지에 기본 인증하기



방금 작성한 .htpasswd와는 다른 파일에 유저 B(beta) 패스를 기재.
$ sudo htpasswd -c /etc/nginx/.htpasswd_beta beta
 New password: beta2
 Re-type new password: beta2
 Adding password for user username

$ cat /etc/nginx/.htpasswd_beta
beta:$beta2$1HL48ana$3OxkzGBydDeyzsc1nURil1

nginx.conf에 추가.


$vim /etc/nginx/nginx.conf
…
server {
    listen 80;
    root /usr/share/nginx/html;
    index index.html index.htm;

    location /page_a{ 
        #認証時に表示されるメッセージ
        auth_basic "Restricted";
        #.htpasswdファイルのパス
        auth_basic_user_file /etc/nginx/.htpasswd; 
        proxy_pass: http://127.0.0.1:8000;
    }

    location /page_b{
        auth_basic "Restricted";

        #ページBの.htpasswdファイルのパス
        auth_basic_user_file /etc/nginx/.htpasswd_beta; 
        proxy_pass: http://127.0.0.1:8000;
    }
}
…

재부팅


$sudo service nginx restart

 이상으로 페이지 B에도 Basic 인증을 걸 수가 있었습니다.

마지막으로



이번에는 별도의 페이지에서 동일한 사용자 경로를 사용할 수 없게 하기 위해 .htpasswd를 나누었습니다.
단순히 여러 페이지에 인증을 걸기만 하면 분리할 필요가 없습니다.
용도에 맞는 설정을 권장합니다.

마지막까지 읽어 주셔서 감사합니다.

 

좋은 웹페이지 즐겨찾기