Docker 桥接和 nginx 允许 ip

Docker 桥接和 nginx 允许 ip

我们有一个包含多个 docker 容器的 docker 桥。主 docker 是一个 nginx 服务器,它充当 web 主机并将所有数据转发到其他容器。

现在的要求是将连接限制在指定的 IP 地址列表中。为此,我编辑了 nginx 服务器文件:

server {
        allow 127.0.0.0/8;
        deny all;
        ...

这应该允许环回 127.0.0.1 连接。

然而,这失败了,查看 access.log 可以知道原因:所有行都以以下内容开头:

    172.25.0.1 - - [10/Apr/2018:08:22:46 +0000] "GET

172.25.0.1是 docker 桥接网络网关;因此 docker “忘记”了外部 ips,我无法再对其进行过滤。

我如何过滤 ips?或者将源 ips 转发给 docker?

答案1

这是预期的,也是 docker 网络的工作方式。默认情况下,您最终会在 docker 主机上得到类似虚拟网络的东西。从外部转发的连接将通过 docker0 和 NAT 到达每个容器。

为了解决这个问题,简单的答案是在 nginx 容器上使用主机网络。即 命令--network host选项docker run。参见:主机网络

另外,请阅读 docker 网络文档。那里有更详细的解释。 https://docs.docker.com/network/

相关内容