Docker内的Express应用程序。仅限制对主机localhost的访问

时间:2018-04-09 04:33:03

标签: node.js express docker nginx

我正在尝试限制对我的express / nodejs应用程序的访问,以便只能从它的域URL访问它。目前,如果我转到http://ip-address-of-server:3000,应用会直接提供服务,绕过nginx。

我尝试在app.listen中添加'localhost' -

app.listen(4000, 'localhost' , () => console.log('Server running'));

但最终导致应用完全无法访问。即使通过nginx。

该应用程序在docker容器中运行。并且nginx正在主机上运行。我认为这可能会导致它,但不知道如何解决这个问题。

2 个答案:

答案 0 :(得分:2)

看起来您想要进行基于IP的过滤,即您希望node.js程序只能从nginx(localhost或remote)和本地访问。

有两种方式

  • 使用express-ipfilter中间件。 https://www.npmjs.com/package/express-ipfilter根据ips过滤请求

  • 让node.js监听所有内容,但更改主机上的iptables以限制对特定ips的端口访问。使用-p将node.js容器的端口暴露给主机,并将该端口的iptable关闭到外部世界

我更喜欢第二种方式,因为它更强大并限制网络级别的流量

答案 1 :(得分:2)

您可以为您的应用使用Docker主机模式网络,因为您提到了#34;应用程序在docker容器中运行。并且nginx正在主机上运行。"。

参考 - https://docs.docker.com/network/host/

这样,它可以通过同一网络上的nginx访问。你的" localhost"在Docker主机模式网络中启动容器后,设置将照常开始工作。