try_files在先前的位置打破拒绝

这个集团

location ~ \.php$ { deny all; } 

它能够很好地阻止所有以.php结尾的文件,而且也可以在任何地方使用

但是当这个被添加上面的块之后(它提供静态文件)

 location ^~ /cdn/ { try_files $uri =404; expires 365d; } 

cdn / test.php(存在)将被下载,而cdn / test1.php(不存在)给404。

我尝试添加rest; 或嵌套的位置在CDN,但它并没有帮助阻止。

问题是你正在使用的^~匹配字符。 使用该前缀,nginx不会在最长的前缀匹配之后检查正则expression式匹配。

你应该得到你想要的行为:

 location /cdn { try_files $uri =404; expires 365d; }