Nginx: Wie verweigert man den öffentlichen Zugriff auf den Endpunkt in Proxy_Pass?

Nginx: Wie verweigert man den öffentlichen Zugriff auf den Endpunkt in Proxy_Pass?

Ich habe eine Subdomainapp.beispiel.comEinrichten, das über Sockets auf Port 4000 unter Verwendung von Proxy_Pass eine Verbindung zu einem Phoenix/Elixir-Backend-Projekt herstellt.

In meinem Projekt habe ich einen Endpunkt namens /admin/auth, den mein PHP-Skript (aufexample.com, nichtapp.beispiel.com) sendet HTTPS-cURL-Posts an. Der /authEndpunkt ist jedoch hochsensibel und ich möchte, dass nur der lokale Host 127.0.0.1 Posts an diesen Endpunkt sendet, an niemand anderen.

Ich habe die folgende Nginx-Konfiguration, aber sie scheint nicht zu funktionieren:

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

Wie würde ich das machen? Und wie könnte ich auch den öffentlichen Zugriff auf den gesamten /admin/Ordner verweigern, der viele weitere sensible Endpunkte enthält?

Mein cURL-Skript auf example.com, das auf localhost 127.0.0.1 läuft, sieht ungefähr so ​​aus. Derzeit funktioniert das Skript nicht mit der obigen Nginx-Konfiguration, aber es funktioniert, wenn ich die location = /admin/authSperre in der Nginx-Konfiguration entferne:

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

verwandte Informationen