Nginx 인증 · 2 min read · Jan 23, 2026

Nginx를 이용한 기본 HTTP 인증

이 튜토리얼에서는 Nginx를 사용하여 서버의 디렉토리 또는 전체 웹사이트를 비밀번호로 보호하는 방법을 보여줍니다. 이는 Apache의 .htaccess /.htpasswd에서의 기본 HTTP 인증에 해당하는 Nginx의 방법입니다.

1 사전 참고

여기서는 www.example.com 웹사이트를 사용하고 있으며, 문서 루트는 /var/www/www.example.com/web/이고, Nginx vhost 구성 파일은 /etc/nginx/sites-enabled/www.example.com.vhost입니다. 비밀번호로 보호할 디렉토리는 /var/www/www.example.com/web/test/입니다.

2 비밀번호 파일 생성

로그인할 수 있는 사용자와 그들의 비밀번호(암호화된 형태로)가 나열된 비밀번호 파일이 필요합니다. 이러한 비밀번호 파일을 생성하기 위해 Apache의 htpasswd 도구를 사용하거나 http://trac.edgewall.org/browser/trunk/contrib/htpasswd.py의 Python 스크립트를 사용할 수 있습니다.

2.1 Apache의 htpasswd 명령 사용

Apache의 htpasswd 명령을 사용하려면 시스템에 존재하는지 확인하십시오:

which htpasswd
root@server1:~# which htpasswd  
/usr/bin/htpasswd  
root@server1:~#

위와 같은 출력이 나타나면 모든 것이 정상입니다 - htpasswd가 이미 설치되어 있습니다. 명령이 아무 출력 없이 반환되면, htpasswd가 시스템에 존재하지 않으며 설치해야 합니다. Debian/Ubuntu에서는 apache2-utils 패키지의 일부로 설치할 수 있으며, 다음과 같이 설치합니다:

apt-get -y install apache2-utils

이제 비밀번호 파일 /var/www/www.example.com/.htpasswd를 생성하고 사용자 falko를 저장하고 싶습니다(비밀번호 파일의 이름은 원하는 대로 지정할 수 있으며, 반드시 .htpasswd라고 할 필요는 없습니다; Apache에서 비밀번호 파일이 이렇게 명명되는 방식이기 때문에 .htpasswd라고 명명했습니다):

htpasswd -c /var/www/www.example.com/.htpasswd falko

사용자 falko의 비밀번호를 입력하라는 메시지가 표시됩니다. -c 스위치는 파일이 처음부터 생성되도록 하며, 이전에 존재하지 않았다면 생성되고, 이전에 존재했다면 새 파일로 덮어쓰여지며, 이전 파일의 모든 사용자가 손실됩니다! 따라서 기존 사용자를 삭제하지 않고 다른 사용자를 추가하려면 -c 스위치 없이 htpasswd 명령을 사용하십시오:

htpasswd /var/www/www.example.com/.htpasswd till

마지막 명령은 사용자 till을 /var/www/www.example.com/.htpasswd에 추가하여 이제 falko와 till 두 사용자가 포함됩니다.

2.2 htpasswd.py Python 스크립트 사용

Apache의 htpasswd 명령을 사용하고 싶지 않거나 사용할 수 없는 경우, http://trac.edgewall.org/browser/trunk/contrib/htpasswd.py의 Python 스크립트를 사용할 수 있습니다.

이를 /usr/local/bin에 다운로드하고 실행 가능하게 만듭니다:

cd /usr/local/bin  
wget http://trac.edgewall.org/export/14464/trunk/contrib/htpasswd.py  
chmod 755 /usr/local/bin/htpasswd.py

이제 비밀번호 파일 /var/www/www.example.com/.htpasswd를 생성하고 사용자 falko를 저장하고 싶습니다(비밀번호 파일의 이름은 원하는 대로 지정할 수 있으며, 반드시 .htpasswd라고 할 필요는 없습니다; Apache에서 비밀번호 파일이 이렇게 명명되는 방식이기 때문에 .htpasswd라고 명명했습니다):

htpasswd.py -c -b /var/www/www.example.com/.htpasswd falko falkossecret

falkossecret를 사용자 falko의 비밀번호로 교체하십시오. -c 스위치는 파일이 처음부터 생성되도록 하며, 이전에 존재하지 않았다면 생성되고, 이전에 존재했다면 새 파일로 덮어쓰여지며, 이전 파일의 모든 사용자가 손실됩니다! 따라서 기존 사용자를 삭제하지 않고 다른 사용자를 추가하려면 -c 스위치 없이 htpasswd.py 명령을 사용하십시오:

htpasswd.py -b /var/www/www.example.com/.htpasswd till tillssecret

마지막 명령은 사용자 till을 /var/www/www.example.com/.htpasswd에 추가하여 이제 falko와 till 두 사용자가 포함됩니다.

3 Nginx 구성

이제 비밀번호 파일이 준비되었으므로, /etc/nginx/sites-enabled/www.example.com.vhost의 Nginx vhost 구성에 추가하기만 하면 됩니다. server {} 컨테이너 안에 추가합니다.

nano /etc/nginx/sites-enabled/www.example.com.vhost

문서 루트의 test 디렉토리를 비밀번호로 보호하고 싶기 때문에 여기서는 location /test {}를 사용합니다(전체 웹사이트를 비밀번호로 보호하려면 location / {}를 사용합니다):

server {
       listen 80;
       server_name www.example.com example.com;
       root /var/www/www.example.com/web;
[...]  
       location /test {
                auth_basic "Restricted";
                auth_basic_user_file /var/www/www.example.com/.htpasswd;
       }
[...]  
}

그 후 Nginx를 다시 로드합니다:

service nginx reload

그게 전부입니다! 이제 브라우저에서 테스트 디렉토리(http://www.example.com/test)로 이동하면 사용자 이름과 비밀번호를 입력하라는 메시지가 표시됩니다:

Nginx 기본 인증 (.htpasswd) 프롬프트.

올바른 사용자 이름과 비밀번호를 입력하면 접근이 허용됩니다:

로그인 성공.

그렇지 않으면 401 권한 필요 오류 메시지가 표시됩니다:

Nginx 권한 필요.

4 링크

저자에 대하여

Falko Timme는 Timme Hosting(초고속 Nginx 웹 호스팅)의 소유자입니다. 그는 HowtoForge의 주요 유지 관리자로(2005년부터) ISPConfig의 핵심 개발자 중 한 명입니다(2000년부터). 그는 또한 O’Reilly의 “Linux 시스템 관리” 책에 기여했습니다.

Share: X/Twitter LinkedIn

새 게시물을 받은 편지함에서 받기

스팸은 없습니다. 언제든지 구독 해지 가능합니다.