如何配置我的Heroku应用程序以限制访问它的herokuapp.com域特定服务器?

问题描述 投票:0回答:1

我有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域。 我的问题是 - 如何判断请求是来自我的Node.js heroku服务器而不是其他代理?谢谢!

nginx heroku devops serverside-rendering ssr
1个回答
-1
投票

你可以试试这些方法:

At Linux level

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


At load balancer level (Linux with full control)

如果你的内部应用程序前面有一个完全控制的nginx:

禁用api.domain.com公共访问权限。

没有必要限制对api.domain.com的访问,因为它们是内部的,没有公共IP。此内部应用程序只能在LAN网络中使用。

只允许特定应用消耗其他应用

  • 您可以使用nginx阻止和拒绝IP地址

  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/

  • HEARTS

您也可以使用Access-Control-Allow-Origin

参考:

At load balancer level (nginx on heroku)

如果您使用nginx作为heroku应用程序和/或您拥有完全控制权,则可以复制先前的配置

注意:据我所知:

  • Heroku不会给你一个内部ip,只有公共域:* .herokuapp.com
  • 你没有在Heroku中拥有完整的Linux控件

At node.js source code

在这个级别,您可以使用:

  • HEARTS

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']; 

因此,您只需要实现自定义逻辑来显示特定主机的错误或重定向。

© www.soinside.com 2019 - 2024. All rights reserved.