Nginx: Como negar acesso público ao endpoint em proxy_pass?

Nginx: Como negar acesso público ao endpoint em proxy_pass?

Eu tenho um subdomínioapp.exemplo.comconfiguração que se conecta a um projeto backend Phoenix/elixir usando soquetes na porta 4000 usando proxy_pass.

No meu projeto, tenho um endpoint chamado /admin/auth, que meu script PHP (noexemplo.com, nãoapp.exemplo.com) enviará postagens HTTPS cURL para. No entanto, o /authendpoint é altamente sensível e quero apenas que o host local 127.0.0.1 envie postagens para esse endpoint, e mais ninguém.

Eu tenho a seguinte configuração do Nginx, mas parece não estar funcionando:

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;
  }
}

Como eu faria isso? Além disso, como eu poderia negar o acesso público a toda a /admin/pasta que contém muitos pontos de extremidade mais confidenciais?

Meu script cURL em example.com, que roda em localhost 127.0.0.1, é mais ou menos assim. Atualmente, o script não está funcionando com a configuração do Nginx acima, mas funciona se eu remover o location = /admin/authbloco na configuração do 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);

informação relacionada