我正在尝试限制对我的express / nodejs应用程序的访问,以便只能从它的域URL访问它。目前,如果我转到http://ip-address-of-server:3000
,应用会直接提供服务,绕过nginx。
我尝试在app.listen中添加'localhost' -
app.listen(4000, 'localhost' , () => console.log('Server running'));
但最终导致应用完全无法访问。即使通过nginx。
该应用程序在docker容器中运行。并且nginx正在主机上运行。我认为这可能会导致它,但不知道如何解决这个问题。
答案 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主机模式网络中启动容器后,设置将照常开始工作。