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 /auth
endpoint é 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/auth
bloco 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);