Nginx: Proxy_pass에서 엔드포인트에 대한 공개 액세스를 거부하는 방법은 무엇입니까?

Nginx: Proxy_pass에서 엔드포인트에 대한 공개 액세스를 거부하는 방법은 무엇입니까?

하위 도메인이 있습니다app.example.comProxy_pass를 사용하여 포트 4000의 소켓을 사용하여 phoenix/elixir 백엔드 프로젝트에 연결하는 설정입니다.

/admin/auth내 프로젝트에는 PHP 스크립트(에 있는) 라는 엔드포인트가 있습니다.example.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/폴더 안에 더 많은 민감한 엔드포인트가 있는 전체 폴더에 대한 공개 액세스를 거부하려면 어떻게 해야 합니까?

localhost 127.0.0.1에서 실행되는 example.com의 내 cURL 스크립트는 다음과 같습니다. 현재 스크립트는 위의 Nginx 구성에서 작동하지 않지만 location = /admin/authNginx 구성에서 블록을 제거하면 작동합니다 .

$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);

관련 정보