我有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服务器而不是其他代理?谢谢!
你可以试试这些方法:
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
如果你的内部应用程序前面有一个完全控制的nginx:
禁用api.domain.com公共访问权限。
没有必要限制对api.domain.com的访问,因为它们是内部的,没有公共IP。此内部应用程序只能在LAN网络中使用。
只允许特定应用消耗其他应用
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作为heroku应用程序和/或您拥有完全控制权,则可以复制先前的配置
注意:据我所知:
在这个级别,您可以使用:
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'];
因此,您只需要实现自定义逻辑来显示特定主机的错误或重定向。