Nginx에서 기본 HTTP 인증을 구성하는 방법
기본 HTTP 인증은 간단한 사용자 이름/비밀번호 인증을 설정하여 웹사이트/애플리케이션 또는 그 일부에 대한 액세스를 제한하는 보안 메커니즘입니다. 이는 본질적으로 전체 HTTP 서버, 개별 서버 블록(Apache의 가상 호스트) 또는 위치 블록을 보호하는 데 사용될 수 있습니다.
추가 읽기: NGINX를 사용하여 이름 기반 및 IP 기반 가상 호스트(서버 블록)를 설정하는 방법
이름에서 알 수 있듯이 이는 신뢰할 수 있는 안전한 방법이 아닙니다. 보다 안정적인 다른 보안 조치와 함께 사용해야 합니다. 예를 들어 웹 애플리케이션이 HTTP에서 실행 중인 경우 사용자 자격 증명은 일반 텍스트로 전송되므로 HTTPS 활성화를 고려해야 합니다.
이 가이드의 목적은 웹 애플리케이션(예: 관리자 측에 국한되지 않음)에서 개인/권한이 있는 콘텐츠를 보호하기 위해 작지만 유용한 보안 계층을 추가하는 데 도움을 주는 것입니다. 또한 아직 개발 단계에 있는 웹사이트나 애플리케이션에 대한 액세스를 방지하는 데에도 사용할 수 있습니다.
요구사항
- CentOS/RHEL 7에 LEMP 스택 설치
- Ubuntu/Debian에 LEMP 스택 설치
HTTP 인증 사용자 파일 생성
사용자 이름:비밀번호
쌍을 저장할 파일을 만드는 것부터 시작해야 합니다. Apache HTTP 서버의 htpasswd 유틸리티를 사용하여 이 파일을 생성합니다.
먼저 htpasswd 유틸리티를 제공하는 패키지인 apache2-utils 또는 httpd-tools가 시스템에 설치되어 있는지 확인하세요. 그렇지 않으면 적절한 명령을 실행하세요. 배포판을 설치하려면:
yum install httpd-tools [RHEL/CentOS]
sudo apt install apache2-utils [Debian/Ubuntu]
다음으로 아래의 htpasswd 명령을 실행하여 첫 번째 사용자의 비밀번호 파일을 생성합니다. -c
옵션은 passwd 파일을 지정하는 데 사용되며, [Enter]를 누르면 사용자 비밀번호를 입력하라는 메시지가 표시됩니다.
htpasswd -c /etc/nginx/conf.d/.htpasswd developer
두 번째 사용자를 추가하고 여기서 -c
옵션을 사용하지 마세요.
htpasswd /etc/nginx/conf.d/.htpasswd admin
이제 비밀번호 파일이 준비되었으므로 액세스를 제한하려는 웹 서버 부분을 구성하십시오. 사용자 이름과 암호화된 비밀번호가 포함된 비밀번호 파일 내용을 보려면 아래 cat 명령을 사용하세요.
cat /etc/nginx/conf.d/.htpasswd
Nginx에 대한 HTTP 인증 구성
앞서 언급했듯이 웹 서버, 단일 웹 사이트(서버 블록 사용) 또는 위치 지시어에 대한 액세스를 제한할 수 있습니다. 이를 달성하기 위해 두 가지 유용한 지시문을 사용할 수 있습니다.
- auth_basic – 'HTTP 기본 인증 ' 프로토콜을 사용하여 사용자 이름과 비밀번호의 유효성을 검사합니다.
- auth_basic_user_file – 비밀번호 파일을 지정합니다.
Nginx 가상 호스트를 비밀번호로 보호
모든 서버 블록에 적용되는 전체 웹 서버에 대한 기본 인증을 구현하려면 /etc/nginx/nginx.conf 파일을 열고 http 컨텍스트에 아래 줄을 추가하세요.
http{
auth_basic "Restricted Access!";
auth_basic_user_file /etc/nginx/conf.d/.htpasswd;
……...
}
Nginx 웹사이트 또는 도메인을 비밀번호로 보호
특정 도메인이나 하위 도메인에 대한 기본 인증을 활성화하려면 /etc/nginx/conf.d/ 또는 /etc/nginx/conf/sites-available 에서 해당 구성 파일을 엽니다. (Nginx 설치 방법에 따라 다름) 서버 블록 또는 컨텍스트에 아래 구성을 추가합니다.
server {
listen 80;
server_name example.com;
auth_basic "Restricted Access!";
auth_basic_user_file /etc/nginx/conf.d/.htpasswd;
location / {
……..
}
……...
}
Nginx의 비밀번호 보호 웹 디렉토리
위치 지시어 내에서 기본 인증을 활성화할 수도 있습니다. 아래 예에서는 /admin
위치 블록에 액세스하려는 모든 사용자에게 인증을 요청합니다.
server {
listen 80;
server_name example.com www.example.com;
location / {
……..
}
location /admin/ {
auth_basic "Restricted Access!";
auth_basic_user_file /etc/nginx/conf.d/.htpasswd;
}
location /public/{
auth_basic off; #turns off basic http authentication off for this block
}
……..
}
기본 HTTP 인증을 구성한 경우 웹 서버, 하위 도메인 또는 사이트의 특정 부분(구현 위치에 따라 다름)에 액세스하려는 모든 사용자에게 아래 스크린샷과 같이 사용자 이름과 비밀번호를 묻는 메시지가 표시됩니다. .
사용자 인증에 실패한 경우 아래와 같이 “401 AuthorizationRequire” 오류가 표시됩니다.
기본 HTTP 인증으로 액세스 제한에서 자세한 내용을 확인할 수 있습니다.
다음과 같은 유용한 Nginx HTTP 서버 관련 가이드를 읽어보는 것도 좋습니다.
- Nginx에서 웹 디렉터리를 비밀번호로 보호하는 방법
- Nginx의 성능을 보호, 강화 및 개선하기 위한 최고의 가이드
- Nginx용 Let's Encrypt SSL 인증서를 사용하여 HTTPS 설정
이 가이드에서는 Nginx HTTP 웹 서버에서 기본 HTTP 인증을 구현하는 방법을 보여주었습니다. 질문이 있으시면 아래 피드백 양식을 사용하세요.