我有一台运行2个docker容器,Node.js API容器和NGINX-RTMP容器的服务器。服务器本身还使用NGINX作为反向代理,根据端口对这两个容器之间的流量进行排序。
NGINX-RTMP服务器通过其网络别名访问API服务器,如下所示:
on_publish http://api-server:3000/authorize
在容器与容器之间进行通信方面非常有效。我也可以使用
这样的网址进行其他选择http://nginx-server:8080/some-endpoint
现在,我在NGINX
服务器上有一条路由,希望将其限制为仅本地流量(即,只有API服务器才可以访问此位置)。现在,通常我可以使用一个简单的
# nginx conf file
location /restricted {
allow 127.0.0.1;
deny all;
}
我想 要做的事情是这样的:
# nginx conf file
location /restricted {
allow api-server;
deny all;
}
但是我需要使用容器的实际IP。现在,可以通过检查获得容器的IP,并且看到IP为172.17.0.1
。但是,当我查看该服务器的其他实例时,我看到某些服务器是172.18.0.1
和17.14.0.2
,因此它们在服务器之间并不是100%一致的。现在,我可以写出172.*.0.0/24
的所有256个变体,但是我想必须有一种“适当”的方法来在nginx中对此通配符,或者甚至是一种更好的在NGINX conf文件中指定容器IP的方法。到目前为止,我发现的唯一信息是修改用于容器的网络类型,但我不想这样做。
我该如何正确处理?
# nginx conf file
location /restricted {
allow 172.*.0.0/24;
deny all;
}
答案 0 :(得分:0)
我可能自己解决了这个问题。
本来我以为我可以172.0.0.1/8
允许我认为可能的所有IP用于本地网络,但这是错误的。
阅读本文后:https://www.arin.net/reference/research/statistics/address_filters/(archive mirror)
根据Internet工程任务组(IETF)文档RFC-1918中规定的标准,IANA为私有Internet保留了以下IPv4地址范围
10.0.0.0/8 IP地址:10.0.0.0 – 10.255.255.255
172.16.0.0/12 IP地址:172.16.0.0 – 172.31.255.255
192.168.0.0/16 IP地址:192.168.0.0 – 192.168.255.255
请注意,172
网络是/12
而不是/8
。
其中解释为
2012年8月,ARIN开始为互联网服务,无线和内容提供商分配“ 172”地址空间。
所以我相信正确的方法是:
# nginx conf file
location /restricted {
allow 172.16.0.0/12;
deny all;
}