拒绝全部被另一个位置块覆盖

location /_private { deny all; } location ~ \.php$ { # Workaround PHP vulnerability: # http://forum.nginx.org/read.php?2,88845,page=3 try_files $uri =404; include /etc/nginx/fastcgi_params; keepalive_timeout 0; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_pass unix:/tmp/php.socket; } 

我想拒绝访问所有的东西,这是在_private目录。 当我尝试访问_private/a ,我得到403错误,就像应该。 但是当我尝试访问_private/b.phpdeny all部分被完全忽略。

使您的/_private位置优先于正则匹配:

 location ^~ /_private { 

而已。

nginx文档具有关于哪个位置块将应用于给定请求的良好信息。 去引用:

  1. 带有“=”前缀的指令与查询完全匹配。 如果find,search停止。
  2. 所有其余的指令与传统的string。 如果该匹配使用“^〜”前缀,则停止search。
  3. 正则expression式,按照它们在configuration文件中定义的顺序。
  4. 如果#3产生匹配,则使用该结果。 否则,使用来自#2的匹配。