NGINX contsainer в качестве обратного прокси между различными экземплярами docker-compose - PullRequest
1 голос
/ 05 мая 2019

Я довольно noob на nginx, а также на Docker

У меня есть два wordpress и один nginx (отдельный) docker-compose.yml.Я хотел бы получить Nginx Conainer в качестве обратного прокси для моих двух WordPress.Например, я хотел бы перейти к http://localhost/wordpressblog или http://localhost/wordpressphotography

Я полностью открыт для рекомендаций

Один из составных:

version: '3'
services:
  wp:
    image: wordpress:latest
    hostname: wordpressblog
    ports:
      - 81:80
    volumes:
      - /opt/wordpress/config/php.conf.ini:/usr/local/etc/php/conf.d/conf.ini
      - /opt/wordpress/wp-app:/var/www/html
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_NAME: "wordpress"
      WORDPRESS_DB_USER: root
      WORDPRESS_DB_PASSWORD: "password"
    depends_on:
      - db
    links:
      - db

Это мой конфиг nginx

upstream wordpressblog {
    server wordpressblog:81;
}
upstream wordpressphotography {
    server wordpressphotography:82;
}


server {
  listen 80;

  location /wordpressblog/ {
      proxy_http_version 1.1;
      proxy_set_header Connection "";
      proxy_pass http://wordpressblog/;
  }
  location /wordpressphotography/ {
      proxy_http_version 1.1;
      proxy_set_header Connection "";
      proxy_pass http://wordpressphotography/;
  }

}

1 Ответ

1 голос
/ 05 мая 2019

Вместо использования NGinX попробуйте и используйте Traefik , который является обратным прокси-сервером с поддержкой Docker.

Вы можете увидеть пример в " Traefik на Docker для веб-разработчиков - с бонусом Let's Encrypt SSL! " от Juan Treminio , чтобы автоматически зарегистрировать свои контейнеры и получить доступ их через предопределенный URL.

Хуан описывает, как решить "танец порта":

Если порт 80 сопоставлен с веб-сервером-A, вы должны выбрать другой порт для привязки для веб-сервера-B и веб-сервера-C.
Это может быстро устареть, потому что вы должны помнить, что http://localhost идет к A, http://localhost:81 идет к B и http://localhost:82 идет к C.

Он указывает:

На виртуальных машинах эта проблема на самом деле не возникает, поскольку вы можете назначить статический IP-адрес вашим серверам и привязать его к файлу хостов вашей системы (/etc/hosts).
Контейнеры по своей природе эфемерны и обычно создаются не в сети вашего хоста, а в частных сетях со своими случайными IP-адресами в специальных диапазонах. Однако вы должны отредактировать /etc/hosts для каждой виртуальной машины, которую вы раскручиваете, и список увеличивается с количеством проектов, которые вы обрабатываете.

Træfik решает обе эти проблемы, во-первых, избавляя от необходимости использовать порты в URL-адресах, а затем с помощью не нужно редактировать /etc/hosts вообще .

Способ, которым Traefik обнаруживает новый контейнер, - это сеть, указанная в Docker:

 docker network create --driver bridge traefik_webgateway

Новый контейнер зарегистрируется в указанной сети док-станции Traefik:

docker run -d --name some-mailhog \
    --network traefik_webgateway \
    --label traefik.docker.network=traefik_webgateway \
    --label traefik.frontend.rule=Host:mailhog.localhost \
    --label traefik.port=8025 \
    mailhog/mailhog

URL становится простым http://mailhog.localhost.

Вы можете аналогичным образом зарегистрировать два компонента Wordpress.

Преимущество: нет необходимости поддерживать статический файл конфигурации NGiNX: любое количество компонентов может зарегистрировать свой URL.


При использовании NGiNX старый пре-трафикский способ заключался в использовании jwilder/nginx-proxy

Это Автоматический обратный прокси-сервер Nginx для Docker :

Docker предоставляет удаленный API для проверки контейнеров и доступа к их IP, портам и другим метаданным конфигурации. Кроме того, он также предоставляет API событий в реальном времени, который можно использовать для уведомлений, когда контейнеры запускаются и останавливаются. Эти API можно использовать для автоматического создания конфигурации обратного прокси.

docker-gen - это небольшая утилита, которая использует эти API и предоставляет метаданные контейнера для шаблонов. Шаблоны обрабатываются, и для перезапуска службы можно запустить дополнительную команду уведомления.

Используя docker-gen, мы можем автоматически генерировать конфигурационные файлы Nginx и перезагружать nginx при их изменении.

...