У меня есть поддоменapp.example.comнастройка, которая подключается к бэкэнд-проекту Phoenix/Elixir с использованием сокетов на порту 4000 с использованием proxy_pass.
В моем проекте есть конечная точка, называемая /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/
папке, в которой находится множество более конфиденциальных конечных точек?
Мой скрипт cURL на example.com, который работает на 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);