SailsJS как API и Nginx: ограничение внешнего доступа

I’m running SailsJS on a digitalocean droplet (MEAN Stack with nginx). Все мои запросы сопоставлены с моим Angular frontend, за исключением тех on / api, которые сопоставлены с proxy_pass на порту 1337 (на котором работает Sails). Эта процедура работает отлично.

Теперь я хотел бы ограничить доступ к моему API только разрешать запросы от моего веб-интерфейса. Я уже пытался запретить / разрешить из моей конфигурации nginx, но это блокирует сам запрос пользователя. Я попробовал несколько ответов, как это, а также, но они не сработали.

Как ограничить доступ к моему API Sails для localhost? Я хотел бы запустить несколько приложений на моей капле и использовать Sails в качестве моего API, который должен быть доступен только приложениями в моей капле.

Мой nginx config:

upstream sails_server {
    server 127.0.0.1:1337;
    keepalive 64;
}

server {
    server_name domain.com;
    index index.html;

    location / {
        root /opt/domain/build;
        try_files $uri $uri/ /index.html;
    }

    location /api {
        proxy_http_version               1.1;
        proxy_set_header Connection      "";
        proxy_set_header Host            $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Real-IP       $remote_addr;
        client_max_body_size             500M;
    }
}

— Заранее спасибо!

1 ответ

  1. Я думаю, что вы не можете сделать это, потому что angular работает в вашем клиенте, поэтому вам нужно получить IP от всех пользователей. Вы можете использовать что-то простое, что работает с trustes proxys

    var ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress

    или использовать более сложные и надежные ссылки