NGINX 에서htpasswd 를 구현하려하는데  

디렉토리만이아닌

그디렉토리 밑의 파일들 모든파일 포함시키려면 어떻게해야하나요?

 

밑의처럼하면 디릭토리 접근할때만 패스검증하지만

즉 admin/ 폴더 접근할때는  패스검증합니다만

 

주소창에 admin/head.php치면 htpasswd밑에와같이 설정하더라도

admin폴더밑의

파일 접근은 가능하더라고요

 

admin 하위디렉토리 파일들 접근할때도 htpasswd 검증을 통과해야만 접근하게하고싶습니다

밑의를 어떻게 수정해야하나요?

 

location /admin {
  auth_basic "Restricted";

               auth_basic_user_file /etc/nginx/passwd/.admin

}
 

  • profile

    디렉토리만 설정하더라도 하위 경로까지 모두 적용되는 것이 정상입니다. 단, php 파일은 PHP-FPM 연동을 위해 별도의 규칙을 선언해 놓으셨을 가능성이 높습니다.

     

    location 설정의 순서와 타입에 따른 우선순위가 매우 복잡한 nginx의 특성상, PHP-FPM 관련 location이 먼저 작동하면 auth_basic을 선언한 location은 무시될 수 있습니다.

     

    이 문제를 해결하려면 PHP-FPM 설정 location 설정을 둘로 나누어 /admin 폴더 내에 있는 \.php$ 파일의 처리 방법을 먼저 선언하고, 그 밖의 \.php$ 파일의 처리 방법을 이후에 선언해야 합니다. location 블록이 여러 개 필요하겠지요. PHP-FPM 연동하는 설정이나 auth_basic 설정이 중복되는 것은 어쩔 수 없습니다.

     

    이미지 캐싱 등의 목적으로 별도 선언한 location도 마찬가지의 문제가 있을 수 있고, 해결책은 동일합니다.

  • profile ?
    기진곰님 먼저 답변감사합니다^^ 말씀하신대로 PHP-FPM NGINX 같이연동해 쓰고있고요
    그런데 제가 잘몰라서 그러는데 admin폴더밑php파일들 접근제한하렴
    어떻게 선언해야하는지 잘몰라서요 ^^:;
    혹시 아신다면 좀 알려주심 감사할게요^^:;

    location ~ \.php$ {

    root /home/site/admin;

    }
    location ~ \.php$ {

    root /home/site/;
    }
  • ? profile

    root /home/site;

     

    location /admin {

        # 접근권한 제한 코드

    }

     

    location ~ ^/admin/.+\.php$ {

        # 접근권한 제한 코드

        # fastcgi 연동 코드

    }

     

    location ~ \.php$ {

        # fastcgi 연동 코드

    }

     

    극히 예외적인 상황을 제외하면 location 안에서 root를 지정해서는 안 됩니다.

  • profile ?
    기진곰님 해보니잘되네요 감사합니다^^