假设在我的 nginx 服务器中,我想完成这两个要求:
1)所有*.php
文件都被传递给php解释器
2) 目录/private/
需要http认证
如果我写
location /private/ {
auth_basic "Restricted";
....
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
.... more settings
}
那么(如果我没记错的话)身份验证将仅适用于非 php 文件。相反,如果我将^~
标志添加到location
块中,那么我会丢失 php 位置。这是合乎逻辑的,因为 nginx 只匹配一个位置块。
似乎剩下的唯一选择是使用嵌套位置:
location /private/ {
auth_basic "Restricted";
....
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
.... more settings
}
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
.... more settings
}
这对我来说看起来相当笨拙和脆弱:每次我添加受保护的目录位置(或具有某些特殊设置的目录)时,我必须记住为 PHP(可能还有其他文件类型)添加嵌套位置。但这似乎是唯一的出路。是这样吗?任何人都可以提出更好的解决方案吗?
抱歉不行。没有更清洁的方法,如此处、此处和文档中所解释的
但是,您可能应该为您的 php 配置使用单独的文件,这样,您所要做的就是: