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

Я запускаю SailsJS на дроплете digitalocean (MEAN Stack с nginx). Все мои запросы сопоставляются с моим интерфейсом Angular, кроме тех, что в /api, которые сопоставляются с proxy_pass на порту 1337 (на котором работает Sails) . Эта процедура работает нормально.

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

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

Моя конфигурация nginx:

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

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


person eleonis    schedule 24.05.2016    source источник


Ответы (1)


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

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

или используйте более сложные и надежные, например link.

person Makah    schedule 25.05.2016
comment
Спасибо за ваш ответ @Makah! Удивительно, но я заставил это работать, добавив атрибут host: '127.0.0.1' в мою конфигурацию local.jssails (я пробовал это раньше, и это не сработало). Теперь nginx перенаправляет все внешние запросы на мой интерфейсный индекс и API-запросы внешнего интерфейса на 127.0.0.1:1337. Буду делать дополнительные тесты... - person eleonis; 27.05.2016