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.