Docker Nginx:通过IP地址子网限制对容器的访问

问题描述 投票:0回答:1

我已经看到了限制 docker nginx 容器中的 IP 访问限制对 Docker 容器的访问以及类似的问题。

场景如下:我的电脑和本地主机上有 15 个用 Laravel 编写的微服务,每个微服务都有自己的 NginX 容器。所以有 15 个 Nginx。所有 Nginx 必须连接在一起并且它们必须仅接受来自另一个容器的请求。 (不用说,其中一个微服务充当 API 网关,并且可以免费接受来自任何 IP 地址的请求)。为此,我创建了一个网络,如下所示 docker network create --subnet 120.120.130.0/26 common_network

对于 
docker-compose

文件中的每个 Nginx,我都有以下配置

foodlist_nginx:
build:
  context: ./dockerfiles
  dockerfile: nginx.Dockerfile
container_name: nginx
image: nginx
restart: unless-stopped
tty: true
ports:
  - "${MICROSERVICE_A_NGINX_PORT}:80"
networks:       
    common_network:
      ipv4_address: 120.120.130.x
volumes:
  - .:/var/www/html

其中
x

中的

ipv4_address: 120.120.130..x
是3到62之间的数字。
default.conf
的配置是
location / {
    try_files $uri $uri/ /index.php?$query_string;
    allow 120.120.130.0/26;
    deny all;
}

到目前为止,一切正常,但有一个问题。

当我通过
localhost:port

从我的电脑向Nginx发送请求时,它接受了该请求,我发现微服务的Nginx检测到我电脑的IP地址为

120.120.130.1
,我不知道为什么.

如果您让我知道为什么我的电脑的IP地址是
120.120.130.1

,我将不胜感激
    

docker nginx ip
1个回答
0
投票
ports:

行。您还应该考虑删除手动 IP 地址分配,甚至可能删除所有

networks:
块。
容器通常无法从 Docker 外部访问,除非您为其声明 

ports:

(或等效的

docker run -p
)。由于这是您的基本要求,因此您可以在这里使用 Docker 的功能,而不是尝试找出手动 IP 地址分配和 IP ACLing。
我可能会尝试将 Compose 文件的这一部分减少到:

version: '3.8' services: foodlist_nginx: build: context: . dockerfile: ./dockerfiles/nginx.Dockerfile restart: unless-stopped networks: default: name: common_network external: true

特别是对于网络配置,我已

default 网络

配置为使用 
docker network create 网络,然后依靠 Compose 自行将内容附加到
default
。我没有设置
ports:
,因此无法从 Docker 外部访问容器。
作为一种变体,您还可以设置 

ports:

以便可以通过告诉 Docker 绑定到主机的 127.0.0.1 本地主机接口(注意,这不同于微服务容器的本地主机或任何 Nginx 代理的本地主机)。

ports:
  - '127.0.0.1:${MICROSERVICE_A_NGINX_PORT}:80'

© www.soinside.com 2019 - 2024. All rights reserved.