Funciona muito bem, o problema é que você entendeu mal como os locais funcionam. O Nginx sempre aplicará apenas um bloco de localização, nunca mais de um. Então, quando você tem dois locais
location ~ \.php$ e location /admin e o URI é /admin/index.php , em seguida, sua primeira localização é aplicada, mas a segunda não. Mesmo se você fosse usar uma reescrita em um local, o nginx descartaria as diretivas e as repararia para o novo local.
Essa também é a razão pela qual você sempre publica configurações completas para não ocultar o que realmente está errado.