특정 파일이 존재할 때 폴더에 대한 액세스를 차단하는 방법 - NGINX

특정 파일이 존재할 때 폴더에 대한 액세스를 차단하는 방법 - NGINX

질문이 하나 있습니다. 폴더에 특정 파일이 포함된 경우 폴더의 모든 파일에 대한 액세스를 차단할 수 있습니까 .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

관련 정보