NGINX白名单内部docker IP

时间:2019-12-17 23:31:52

标签: docker nginx

我有一台运行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.117.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;
}

1 个答案:

答案 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;
}