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 htpasswdroot@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 falkossecretfalkossecret를 사용자 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)로 이동하면 사용자 이름과 비밀번호를 입력하라는 메시지가 표시됩니다:

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

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

4 링크
- Nginx: http://nginx.org/
- Nginx 위키: http://wiki.nginx.org/
- htpasswd.py Python 스크립트: http://trac.edgewall.org/browser/trunk/contrib/htpasswd.py
저자에 대하여
Falko Timme는 Timme Hosting(초고속 Nginx 웹 호스팅)의 소유자입니다. 그는 HowtoForge의 주요 유지 관리자로(2005년부터) ISPConfig의 핵심 개발자 중 한 명입니다(2000년부터). 그는 또한 O’Reilly의 “Linux 시스템 관리” 책에 기여했습니다.
새 게시물을 받은 편지함에서 받기
스팸은 없습니다. 언제든지 구독 해지 가능합니다.