Вы можете попробовать эти подходы:
На уровне 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 с полным контролем перед вашими внутренними приложениями:
Отключить публичный доступ 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
На этом уровне вы можете использовать:
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
Это значение заголовка является хостом, с которого был сделан запрос:
var host = req.headers['host'];
Итак, вам просто нужно реализовать собственную логику для отображения ошибки или перенаправления для определенных хостов.