Nginx: как запретить публичный доступ к конечной точке в proxy_pass?

Nginx: как запретить публичный доступ к конечной точке в proxy_pass?

У меня есть поддоменapp.example.comнастройка, которая подключается к бэкэнд-проекту Phoenix/Elixir с использованием сокетов на порту 4000 с использованием proxy_pass.

В моем проекте есть конечная точка, называемая /admin/auth, которую использует мой PHP-скрипт (например.com, нетapp.example.com) будет отправлять HTTPS cURL-сообщения на. Однако /authконечная точка очень чувствительна, и я хочу, чтобы только локальный хост 127.0.0.1 отправлял сообщения на эту конечную точку, и никто другой.

У меня есть следующая конфигурация Nginx, но она, похоже, не работает:

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

Как мне это сделать? Кроме того, как мне запретить публичный доступ ко всей /admin/папке, в которой находится множество более конфиденциальных конечных точек?

Мой скрипт cURL на example.com, который работает на localhost 127.0.0.1, выглядит примерно так. В настоящее время скрипт не работает с конфигурацией Nginx выше, но он работает, если я уберу блок location = /admin/authв конфигурации 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);

Связанный контент