질문이 하나 있습니다. 폴더에 특정 파일이 포함된 경우 폴더의 모든 파일에 대한 액세스를 차단할 수 있습니까 .block
? 나는 믿을 수 있는 것을 알고 있습니다:
location ~ \.(mp3|log|txt|rtf|doc|docx)$ {
deny all;
return 404;
}
가능하다면 어떻게 해야 할까요?
나는 다음을 시도해 보았습니다.
location ~ \.block {
deny all;
return 404;
}
하지만 이 기능은 폴더 내의 파일이 아닌 .block 파일만 제한합니다(여전히 다운로드하거나 브라우저에서 일반 열 수 있음).
인사말.
답변1
당신이 달성하려는 것이 기본적으로 NginX에 존재하지 않는 것 같습니다. IF 문을 사용할 수 있지만 알고 계시죠.... IFISEVIL
이러한 파일을 수동으로 추가하므로 다음을 사용하면 됩니다.
location ~ /(folder1|folder2|folder3|...) {
deny all;
}
이렇게 하면 폴더를 차단할 때마다 새 위치를 만들 필요가 없습니다. 이 목록에 폴더를 추가하기만 하면 바로 사용할 수 있습니다.
답변2
디렉터리 이름을 알 수 없거나 영구적으로 변경하는 경우 @Bert 응답을 사용하여 bash-script를 통해 수집된 이름으로 별도의 구성을 생성하고 cron으로 실행할 수 있습니다.
1. nginx config에서 디렉토리를 찾고 수집하는 스크립트입니다.
#! /bin/bash
# Search directories with file '.block' and collect them in a variable.
# Format dir1|dir2|dir3
DIR_NAMES=$(find ~/temp -type f -name '.block' -printf '|%h')
# remove first "|"
DIR_NAMES=${DIR_NAMES#?}
# generate new config with names
echo "location ~ /($DIR_NAMES) {
deny all;
}" > nginx-block-directories.conf
# reload nginx with a new config
sudo nginx reload
2. 생성된 구성을 기본 nginx 구성에 포함합니다(예: "서버" 섹션).
include nginx-block-directories.conf;
3. 매일 밤 nginx 구성을 새로 고칩니다(crontab -e):
30 3 * * * /path/script.sh