Как настроить приложение Heroku для ограничения доступа к своему домену herokuapp.com на конкретном сервере? - PullRequest
0 голосов
/ 14 января 2019

У меня есть 2 приложения heroku, одно для сервера API и одно для сервера Node.js. Я хотел бы разрешить серверу Node.js обращаться к api-server.herokuapp.com при выполнении рендеринга на стороне сервера (поскольку быстрее получить доступ к серверу API через внутренний маршрутизатор, чем к пользовательскому домену, который должен передавать запросы через внешний DNS ).
Однако я также хотел бы ограничить доступ к api-server.herokuapp.com серверу Node.js. То есть браузеры не могут получить доступ к api-server.herokuapp.com. Браузеры могут получить доступ к серверу API только через пользовательский домен API. Если кто-то попытается получить прямой доступ к api-server.herokuapp.com, запрос будет перенаправлен на пользовательский домен API.
У меня вопрос: как я могу узнать, что запрос поступил от моего сервера Herode Node.js, но не от других агентов? Спасибо!

1 Ответ

0 голосов
/ 15 января 2019

Вы можете попробовать эти подходы:

На уровне Linux

iptables -A block_outgoing -j DROP -d blah.com
iptables -A block_outgoing -j DROP -d ww1.blah.com
iptables -A block_outgoing -j DROP -d ww2.blah.com
iptables -A block_outgoing -j DROP -d ww3.blah.com

Ссылка: https://www.cyberciti.biz/tips/linux-iptables-6-how-to-block-outgoing-access-to-selectedspecific-ip-address.html


На уровне балансировки нагрузки (Linux с полным контролем)

Если у вас nginx с полным контролем перед вашими внутренними приложениями:

basic nginx diagram

Отключить публичный доступ api.domain.com.

Нет необходимости ограничивать доступ к api.domain.com , поскольку они внутренние без публичного ip. Эти внутренние приложения могут использоваться только внутри вашей локальной сети.

Разрешено использовать только определенное приложение.

  • Вы можете использовать nginx Block And Deny IP Address

  allow 10.10.100.20; # Allow a single remote host
  deny all; # Deny everyone else

Ссылка: https://support.hypernode.com/knowledgebase/blocking-allowing-ip-addresses-in-nginx/

Также вы можете использовать Access-Control-Allow-Origin

Ссылка:

На уровне балансировщика нагрузки (nginx на героку)

Если вы используете nginx в качестве приложения heroku и / или имеете полный контроль, вы можете повторить предыдущую конфигурацию

Примечание: Насколько я знаю:

  • Heroku не выдает внутренний ip, только публичный домен: * .herokuapp.com
  • У вас нет полного контроля над Linux в Heroku

В исходном коде node.js

На этом уровне вы можете использовать:

  • CORS

app.all('/*', function(req, res, next) {
  res.header("Access-Control-Allow-Origin", "http://domain1.com,http://domain2.com");
  res.header("Access-Control-Allow-Headers", "X-Requested-With");
  next();
});

Ссылка: - https://stackoverflow.com/a/9429405/3957754

  • Host Header

Это значение заголовка является хостом, с которого был сделан запрос:

var host = req.headers['host']; 

Итак, вам просто нужно реализовать собственную логику для отображения ошибки или перенаправления для определенных хостов.

...