2016-06-18 1 views
1

.htpasswd를 사용하여 내 도메인의/admin/섹션을 보호하려고합니다.Nginx에서 .htpasswd를 사용하여 폴더의 파일을 암호로 보호하는 암호

location /admin/ { 
      try_files $uri $uri/ =404; 
      auth_basic "Restricted"; 
      auth_basic_user_file /etc/nginx/.htpasswd; 
    } 

그러나 해당 폴더 내에서 관련 파일이 여전히 볼 수 있습니다 :

나는 성공적으로이 설정을 사용하여 루트 index.php 파일을 보호 할 수 있어요. 예를 들어, http://domain.com/admin/whatever.php에 - 페이지가로드되면 Nginx 비밀번호 인증이 나타나지만 단순히 취소하고 페이지를 볼 수 있습니다.

일부 연구를 수행 한 후 regex wildcards을 성공적으로 사용하지 못했습니다.

Doesn't work:

location "~^/admin/.$" { 
      try_files $uri $uri/ =404; 
      auth_basic "Restricted"; 
      auth_basic_user_file /etc/nginx/.htpasswd; 
    } 

Doesn't work:

location "~^/admin/*\$" { 
      try_files $uri $uri/ =404; 
      auth_basic "Restricted"; 
      auth_basic_user_file /etc/nginx/.htpasswd; 
    } 

내가 어떻게 비밀 루트 인덱스뿐만 아니라 하위 폴더와 파일을 보호? 과거/admin /에 액세스 할 수 없어야합니다.

+1

' "~ ^/admin /.*"'을 사용해 보셨습니까? – SztupY

+0

그 덕분에, 고마워요! 그 문법을 어떻게 알았습니까? – some1

답변

5

귀하의 정규 표현식 구문은 거의 좋은, 당신은 실제로 당신이 만든 두 개의 시도를 혼합 할 수 있습니다

location "~^/admin/.*" { 
     try_files $uri $uri/ =404; 
     auth_basic "Restricted"; 
     auth_basic_user_file /etc/nginx/.htpasswd; 
} 

이 정규 표현식 구문 .는 모든 문자 (하나 하나)을 의미하기 때문에, 그리고 *는 의미 이전 "무언가"의 양 (0이 될 수 있음) 두 가지를 혼합하면 (.*) 모든 문자의 양을 의미합니다.

이것은 정규 표현식의 기본 사항 중 하나이기 때문에 이에 대해 좀 더 배우는 것이 좋습니다. Learning Regular Expressions에는 다음 단계의 가이드가 포함되어 있습니다. 또한 URL에 적용되지는 않지만 개행을 처리 할 때 와일드 카드 .의 몇 가지 제한 사항에 대한 메모가 포함되어 있습니다.