Como você descobriu, não é recomendável definir as configurações de autenticação no nível do servidor, pois elas se aplicam a todos os locais. Embora seja possível desativar a autenticação básica, não parece haver uma maneira de limpar uma lista de permissões de IP existente.
Uma solução melhor seria adicionar a autenticação ao local /
para que não seja herdada por /hello
.
O problema ocorre se você tiver outros locais que exigem a lista de permissões básica de auth e IP, caso em que pode valer a pena considerar mover os componentes de autenticação para um arquivo de inclusão ou aninhá-los em /
.
server {
listen 80 default;
# Lock down the "root" directory to specific IP addresses
location / {
satisfy any;
# Basic auth
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.htpasswd;
# IP whitelist
include /etc/nginx/conf.d/ip-whitelist.conf.include;
deny all;
# Inherits auth settings from parent
location ~ \.php$ {
# PHP specific config
}
}
# Lock down the "hello" directory to specific IP addresses
location /hello/ {
# Developers only - ever!
allow 12.34.56.78;
deny all;
}
# ...
}