我写这个是为了防止目录“下载”被访问,但来自 IP 1.2.3.4。
location ~ /folder/download {
allow 1.2.3.4;
deny all;
return 403;
}
但是,目录“文件夹”也被阻止了,这是我不希望发生的。
我究竟做错了什么?
更新:
以下是所有实际配置:
server {
server_name www.domain.com;
rewrite ^ $scheme://domain.com$request_uri? permanent;
}
server {
server_name atpc.info;
access_log /var/log/nginx/atpc.info.access;
error_log /var/log/nginx/atpc.info.error;
root /var/www/atpc.info;
location ^~ folder/download {
allow 1.2.3.4;
deny all;
}
location ^~ folder/includes {
allow 1.2.3.4;
deny all;
}
location ^~ folder/mythings {
allow 1.2.3.4;
deny all;
}
location ^~ folder/functions {
allow 1.2.3.4;
deny all;
}
location / { index index.htm index.php; }
location ~ .php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}
location = /favicon.ico {
return 204;
access_log off;
log_not_found off;
}
location = /robots.txt { allow all; log_not_found off; access_log off; }
location ~ /\. { deny all; access_log off; log_not_found off; }
}
谢谢。
答案1
您可能需要 location ^~ 而不是 location ~,因为前者是不允许正则表达式覆盖的前缀匹配,而后者是正则表达式位置。另外,删除 return 403;allow 和 denied 指令足以满足您的应用程序的要求,并且将始终评估 return,这意味着每个人都会得到 403。