NGINX 에서htpasswd 를 구현하려하는데 디렉토리만이아닌 그디렉토리 밑의 파일들 모두 포함시키려면 어떻게해야하나요?
CMS/프레임워크 | XE 1.x |
---|---|
개발 언어 | PHP 5.x |
NGINX 에서htpasswd 를 구현하려하는데
디렉토리만이아닌
그디렉토리 밑의 파일들 모든파일 포함시키려면 어떻게해야하나요?
밑의처럼하면 디릭토리 접근할때만 패스검증하지만
즉 admin/ 폴더 접근할때는 패스검증합니다만
주소창에 admin/head.php치면 htpasswd밑에와같이 설정하더라도
admin폴더밑의
파일 접근은 가능하더라고요
admin 하위디렉토리 파일들 접근할때도 htpasswd 검증을 통과해야만 접근하게하고싶습니다
밑의를 어떻게 수정해야하나요?
location /admin {
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/passwd/.admin
}
댓글 4
디렉토리만 설정하더라도 하위 경로까지 모두 적용되는 것이 정상입니다. 단, php 파일은 PHP-FPM 연동을 위해 별도의 규칙을 선언해 놓으셨을 가능성이 높습니다.
location 설정의 순서와 타입에 따른 우선순위가 매우 복잡한 nginx의 특성상, PHP-FPM 관련 location이 먼저 작동하면 auth_basic을 선언한 location은 무시될 수 있습니다.
이 문제를 해결하려면 PHP-FPM 설정 location 설정을 둘로 나누어 /admin 폴더 내에 있는 \.php$ 파일의 처리 방법을 먼저 선언하고, 그 밖의 \.php$ 파일의 처리 방법을 이후에 선언해야 합니다. location 블록이 여러 개 필요하겠지요. PHP-FPM 연동하는 설정이나 auth_basic 설정이 중복되는 것은 어쩔 수 없습니다.
이미지 캐싱 등의 목적으로 별도 선언한 location도 마찬가지의 문제가 있을 수 있고, 해결책은 동일합니다.
그런데 제가 잘몰라서 그러는데 admin폴더밑php파일들 접근제한하렴
어떻게 선언해야하는지 잘몰라서요 ^^:;
혹시 아신다면 좀 알려주심 감사할게요^^:;
location ~ \.php$ {
root /home/site/admin;
}
location ~ \.php$ {
root /home/site/;
}
root /home/site;
location /admin {
# 접근권한 제한 코드
}
location ~ ^/admin/.+\.php$ {
# 접근권한 제한 코드
# fastcgi 연동 코드
}
location ~ \.php$ {
# fastcgi 연동 코드
}
극히 예외적인 상황을 제외하면 location 안에서 root를 지정해서는 안 됩니다.