O problema subjacente que você está enfrentando é que apenas uma única diretiva location
corresponderá a cada solicitação para especificar os parâmetros para o processamento da solicitação. Além disso, como a outra resposta menciona, a ordem de certas diretivas é importante em nginx - tudo o mais é igual, o location
com a primeira expressão regular para correspondência obtém o bolo inteiro, portanto, não faz sentido definir um local de regex mais específico depois de um menos específico no mesmo nível.
Considerando a revelação de Drifter104 comment os locais aninhados são totalmente compatíveis e são uma boa prática, de acordo com o link Em seguida, podemos derivar a seguinte configuração com o mapa geo
para controle de acesso:
geo $wpadmin {
default 0;
172.17.0.0/16 1;
}
server {
…
location /wp-admin {
if ($wpadmin = 0) {
return 403 "no wp-admin for you!\n";
}
try_files $uri $uri/ /index.php;
}
location ~ \.php$ {
location ~ /wp-(admin/|login\.php\b) {
if ($wpadmin = 0) {
return 403 "no wp-admin/login for you!\n";
}
fastcgi_pass …
}
fastcgi_pass …
}
…
}
Observe, no entanto, que, como apenas uma única diretiva location
pode ser usada para especificar como processar a solicitação, é necessário copiar e colar todas as diretivas fastcgi_pass
et al em dois locais separados (por exemplo, , você pode querer usar a diretiva include
conforme uma sugestão anterior), bem como implementar o controle /wp-admin/
face para o conteúdo estático e dinâmico.