我有一个子域名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/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);