.htaccess разрешить доступ для прокси-контейнера Docker - PullRequest
0 голосов
/ 27 апреля 2019

у меня 4 контейнера. Главный с nginx, который служит прокси-сервером и перенаправляет весь трафик в 3 других контейнера. Эти контейнеры с Apache и хранит различные веб-приложения. Каждый из этого контейнера содержит папку с .htaccess. Этот файл разрешает доступ к этой папке только для определенных IP-адресов. И вот проблема, когда я удаляю этот файл, все работает, и трафик перенаправляется, но когда я добавляю этот файл следующим образом:

 order allow,deny
 allow from 172.26.0.0/16 (IP of the nginx-proxy)
 allow from nginx-proxy.net (name of the container)
 allow from x.x.x.x (another IPes)
 deny from all  

Это не работает, и я получаю «У вас нет разрешения на доступ ...». Как заставить это работать с .htaccess или, может быть, должен быть другой подход. Но только определенная папка должна быть защищена, остальные нет. Спасибо

1 Ответ

0 голосов
/ 27 апреля 2019

Для этой настройки я бы:

  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, тогда IP-адрес докераЗдесь вам достаточно защиты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...