location /private/ {
auth_basic "Restricted";
....
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
.... more settings
}
然后(如果我没记错的话),身份验证只会应用于非php文件。如果我在location
块中添加^~
标志,那么我就失去了php位置。这是合理的,因为nginx只匹配一个location块。
看来唯一剩下的选择是使用嵌套的location:
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(以及可能是其他文件类型)添加嵌套位置。但似乎这是唯一的解决办法。是这样吗?有人能提出更好的解决方案吗?