Задать вопрос
@Strohmann

Как настроить разрешение поддоменов в Docker-контейнеры?

Здравствуйте, товарищи.
Впервые столкнулся с настройкой NGINX.

Задача состоит в том, чтобы перенаправлять запросы к поддоменам в Docker-контейнеры.

Имеется сеть контейнеров, состоящая из БД. NGINX, и n-ого количества контейнеров с приложением. Необходимо организовать обработку сервером адресов вида anna.mysite.net, bob.mysite.net и передачу запросов в соответствующий контейнер (anna, bob).
Набросал такой конфиг.
spoiler
events {
}

http {
	server {
	    listen          80;
	    server_name     anna.mysite.net www.anna.mysite.net;
	    location / {
		proxy_pass  http://anna:3000/;
	    }
	}
	server {
	    listen          80;
	    server_name     bob.mysite.net www.bob.mysite.net;
	    location / {
		proxy_pass  http://bob:3000/;
	    }
	}
	server {
	    listen          80;
	    server_name     charlie.mysite.net www.charlie.mysite.net;
	    location / {
		proxy_pass  http://charlie:3000/;
	    }
	}
}


Как сделать его универсальным? Можно ли применять регулярные выражения для выделения поддомена и прописывать его в proxy_pass?
  • Вопрос задан
  • 490 просмотров
Подписаться 2 Простой 1 комментарий
Пригласить эксперта
Ответы на вопрос 2
Посмотрите официальную документацию по nginx.
Там есть раздел Имена, заданные регулярными выражениями.
Вот кусок оттуда:
К именованному выделению в регулярном выражении можно впоследствии обратиться через переменную:
server {
    server_name   ~^(www\.)?(?<domain>.+)$;

    location / {
        root   /sites/$domain;
    }
}
Ответ написан
Комментировать
@q2digger
никого не трогаю, починяю примус
Рекомендую посмотреть на контейнер https://github.com/jwilder/nginx-proxy
Этот nginx умеет автоматически поднимать virtual hosts на основе переменных окружения заданных при запуске контейнера.

Вот реальный docker-compose.yml моей песочницы с конфлюэнсом и постгрессом.
переменные
VIRTUAL_HOST: 'confluence.local.net'
VIRTUAL_PORT: '8090'
заставят nginx-proxy создать соответствующий virt-host c редиректом в контейнер confluence , port 8080

version: '2'

services:
  confluence:
    image: q2digger/confluence:latest
    container_name: confluence
    hostname: confluence
    volumes:
      - app_data:/var/atlassian/application-data/confluence
    restart: always
    ports:
      - 8090:8090
      - 8091:8091
    networks:
      - confluence
      - proxy
    environment:
      JVM_MINIMUM_MEMORY: '2048m'
      JVM_MAXIMUM_MEMORY: '4096m'
      CATALINA_CONNECTOR_PROXYNAME: 'confluence.local.net'
      CATALINA_CONNECTOR_PROXYPORT: '443'
      CATALINA_CONNECTOR_SCHEME: 'https'
      VIRTUAL_HOST: 'confluence.local.net'
      VIRTUAL_PORT: '8090'
  proxy:
    image: jwilder/nginx-proxy
    ports:
      - 0.0.0.0:80:80
      - 0.0.0.0:443:443
    volumes:
      - ./confluence.local.net.conf:/etc/nginx/vhost.d/confluence.local.net:ro
      - /var/run/docker.sock:/tmp/docker.sock
      - ./certs/:/etc/nginx/certs:ro
    networks:
      - proxy
  database:
    image: atlassian/postgres:9.4
    volumes:
      - db_data:/var/lib/postgresql/data
    networks:
      - confluence
    environment:
      - DB_PASS=atlassian
      - DB_NAME=confluence
      - DB_USER=atlassian

volumes:
  db_data:
  app_data:

networks:
  confluence:
  proxy:
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы