Nginx: ¿Cómo denegar el acceso público al punto final en proxy_pass?

Nginx: ¿Cómo denegar el acceso público al punto final en proxy_pass?

tengo un subdominioaplicación.ejemplo.comconfiguración que se conecta a un proyecto backend de Phoenix/elixir usando sockets en el puerto 4000 usando proxy_pass.

En mi proyecto, tengo un punto final llamado /admin/auth, que mi script PHP (enejemplo.com, noaplicación.ejemplo.com) enviará publicaciones HTTPS cURL a. Sin embargo, el /authpunto final es muy sensible y solo quiero que el host local 127.0.0.1 envíe publicaciones a ese punto final, a nadie más.

Tengo la siguiente configuración de Nginx, pero no parece funcionar:

upstream app {
  server 127.0.0.1:4000 max_fails=5 fail_timeout=60s;
}
server {
  server_name app.example.com;

  listen [::]:443 ssl;
  listen 443 ssl;

  location = /admin/auth {
    allow 127.0.0.1;
    deny all;
  }

  location / {
    proxy_http_version 1.1;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_set_header X-Cluster-Client-Ip $remote_addr;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_pass http://app;
  }
}

¿Cómo haría esto? Además, ¿cómo podría denegar el acceso público a toda la /admin/carpeta que contiene muchos más puntos finales confidenciales?

Mi script cURL en example.com, que se ejecuta en localhost 127.0.0.1, se parece a esto. Actualmente, el script no funciona con la configuración de Nginx anterior, pero funciona si elimino el location = /admin/authbloque en la configuración de Nginx:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"https://app.example.com/admin/auth");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_exec($ch);
curl_close($ch);

información relacionada