Nginx:如何拒绝对 proxy_pass 中的端点的公共访问?

Nginx:如何拒绝对 proxy_pass 中的端点的公共访问?

我有一个子域名app.example.com设置使用 proxy_pass 通过端口 4000 上的套接字连接到 phoenix/elixir 后端项目。

在我的项目中,我有一个名为的端点/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/其中包含更多敏感端点的整个文件夹?

我在 example.com 上的 cURL 脚本运行在 localhost 127.0.0.1 上,如下所示。目前,该脚本无法与上述 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);

相关内容