Nginx를 사용한 기본 HTTP 인증
이 튜토리얼은 다음 OS 버전에 대해 존재합니다.
- 우분투 16.04(Xenial Xerus)
- 우분투 11.04(Natty Narwhal)
이 페이지에서
- 1 서문
- 2 암호 파일 만들기\n
- 2.1 Apaches htpasswd 명령 사용
- 2.2 htpasswd.py Python 스크립트 사용
- 3 Nginx 구성
- 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
저자 소개