웹사이트 검색

Nginx를 사용한 기본 HTTP 인증


이 튜토리얼은 다음 OS 버전에 대해 존재합니다.

  • 우분투 16.04(Xenial Xerus)
  • 우분투 11.04(Natty Narwhal)

이 페이지에서

  1. 1 서문
  2. 2 암호 파일 만들기\n
  3. 2.1 Apaches htpasswd 명령 사용
  4. 2.2 htpasswd.py Python 스크립트 사용
  5. 3 Nginx 구성
  6. 4개의 링크

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

1 서문

문서 루트 /var/www/www.example.com/web/ 및 Nginx vhost 구성 파일 /etc/nginx/sites-enabled/www.example.com.vhost와 함께 웹사이트 www.example.com을 사용하고 있습니다. 암호로 보호하려는 디렉토리는 /var/www/www.example.com/web/test/입니다.

2 비밀번호 파일 생성

로그인할 수 있어야 하는 사용자가 암호와 함께 나열되는 암호 파일이 필요합니다(암호화된 형식). 이러한 암호 파일을 만들려면 Apache의 htpasswd 도구를 사용하거나 http://trac.edgewall.org/browser/trunk/contrib/htpasswd.py의 Python 스크립트를 사용할 수 있습니다.

2.1 Apaches htpasswd 명령 사용

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

which htpasswd
:~#

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

apt-get -y install apache2-utils

지금 암호 파일 /var/www/www.example.com/.htpasswd를 만들고 그 안에 사용자 falko를 저장하고 싶습니다(암호 파일에 원하는 이름을 지정할 수 있습니다. 이름을 .htpasswd로 지정할 필요는 없습니다. I 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로 지정할 필요는 없습니다. I 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

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

3 Nginx 구성

이제 암호 파일이 준비되었으므로 서버 {} 컨테이너 내부의 /etc/nginx/sites-enabled/www.example.com.vhost에 있는 Nginx 가상 호스트 구성에 암호 파일을 추가하기만 하면 됩니다.

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

문서 루트에 있는 테스트 디렉토리를 비밀번호로 보호하고 싶기 때문에 여기에서 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 Authorization Required 오류 메시지가 표시됩니다.

4 링크

  • Nginx: http://nginx.org/
  • Nginx 위키: http://wiki.nginx.org/
  • htpasswd.py Python 스크립트: http://trac.edgewall.org/browser/trunk/contrib/htpasswd.py

저자 소개