.htaccess允许访问Docker代理容器

时间:2019-04-27 15:40:17

标签: apache .htaccess docker nginx

我有4个容器。使用nginx作为代理,将所有流量重定向到另一个3个容器。这些容器带有apache并存储不同的Web应用程序。每个此容器都包含带有.htaccess的文件夹。该文件仅允许特定IP访问此文件夹。这是当我删除此文件时的所有问题,所有的工作和流量都被重定向,但是当我按如下方式添加此文件时:

{{1}}

它不起作用,我得到“您无权访问...”。如何使其与.htaccess一起使用,或者应该有不同的方法。但是只有特定的文件夹需要保护,其余的则不需要。谢谢

1 个答案:

答案 0 :(得分:0)

对于此设置,我将:

  1. 删除.htaccess文件;和
  2. 确保未使用docker run -p或Docker Compose ports:选项发布后端服务。

Docker的标准网络设置为容器提供私有IP地址,这主要是实现细节。当前主机外部的呼叫者(有时甚至是同一主机上的呼叫者)无法直接访问容器的IP地址;他们必须联系主机并使用容器的已发布TCP端口。如果容器没有发布的端口,则无法访问。

在容器之间,只要它们位于相同的Docker内部网络上(或位于相同的docker-compose.yml文件中,而没有显式的networks:),则可以使用容器直接相互访问名称作为主机名。

因此,如果您运行:

docker network create app
docker run --net app -p 80:80 -v ... nginx
docker run --net app                 service1
docker run --net app                 service2
docker run --net app                 service3

然后:

  • nginx容器可以proxy_pass http://service1/,因为服务位于同一Docker内部网络上
  • 脱离主机的呼叫者可以到达http://physical_host.example.com/,并且主机上的HTTP端口80被路由到nginx容器
  • 脱离主机的呼叫者无法通过nginx代理访问三项后端服务

如果这是您尝试通过Apache的访问机制实现的唯一控件,那么Doc​​ker的IP级别保护对您而言就足够了。