Как настроить порт для поддомена в AWS?

Как настроить порт для поддомена в AWS?

У меня есть домен (например, example.com), зарегистрированный на godaddy.com, и я использую AWS для хостинга. Nameserver на Godaddy позже добавлен в AWS

введите описание изображения здесь

У меня установлен сервер ubuntu (t2.medium) apache. В моем проекте в Docker установлены LAMP, ELK, Node, React и Postgres. Все работает на локальной системе с использованием прямых портов. В моем проекте открыто несколько портов, т.е.

  • example.com:3000 реагировать приложение [фронтенд]
  • example.com:5601 приложение kibana
  • example.com:5050 приложение postgradmin
  • example.com/radius php-приложение [бэкэнд]
  • example.com:8080 приложение phpmyadmin

Мои желаемые URL-адреса:

Я пробовал несколько вещей, но ничего не работает. на route53 введите описание изображения здесь

попробовал обратный прокси на apache, добавив отдельные файлы conf, например

default.conf

<VirtualHost *:80>
    ServerAdmin [email protected]
    DocumentRoot "/var/www/html"
    ServerName example.com
    <Directory "/var/www/html/">
        AllowOverride all
    </Directory>
</VirtualHost>

kibana.conf

Listen 5601

<VirtualHost *:5601>
    ServerAdmin [email protected]
    ServerName kibana.example.com
</VirtualHost>

pgadmin.conf

Listen 5050

<VirtualHost *:5050>
    ServerAdmin [email protected]
    ServerName pgadmin.example.com
</VirtualHost>

когда я запускаю docker-compose на EC2,http://example.com/radiusработает нормально. но другие нет (напримерhttp://kibana.example.com). но если попробовать напрямую с портом (например, example.com:5601), то все работает. но я хочу использовать поддомен, а не домен с портом.

Как это сделать?

Обратный прокси-сервер Я попробовал, как указано в описании, но он не работает должным образом.

решение1

Решение найдено, прокомментируйте, пожалуйста, если этот подход неверен.

Добавил свои поддомены в AWS route53:

aws-маршрут53

В файле docker-compose.yml добавленотрафики добавил другие мои изображения в той же сети (t2_прокси)

traefik:
  image: "traefik:v2.9"
  container_name: $DOCKER_IMAGE_TRAEFIK
  command:
    #- "--log.level=DEBUG"
    - "--api.insecure=true"
    - "--providers.docker=true"
    - "--providers.docker.exposedbydefault=false"
    - "--entrypoints.web.address=:80"
  ports:
    - "80:80"
    - "8080:8080"
  labels:
      - traefik.enable=true
      - traefik.http.routers.api.rule=Host(`$DOCKER_TRAEFIK_HOST_PROXY`)
      - traefik.http.routers.api.entrypoints=web
      - traefik.http.routers.api.service=api@internal
    #  - traefik.port=8080"
  volumes:
    - "/var/run/docker.sock:/var/run/docker.sock:ro"
  networks:
    - t2_proxy
    - postgreNetwork
    - elk

В этой конфигурации $DOCKER_IMAGE_TRAEFIK — это имя образа traefik из моего файла .env. Вы можете добавить свое имя образа, а $DOCKER_TRAEFIK_HOST_PROXY — это имя хоста, например proxy.example.com

для конфигурации порта:

phpmyadmin:
  image: phpmyadmin:latest
  platform: linux/amd64
  container_name: $DOCKER_IMAGE_PHPMYADMIN
  links:
    - mysqldb
  networks:
    - t2_proxy
  environment:
    PMA_HOST: mysqldb
    PMA_PORT: ${MYSQL_PORT:-3306}
  # ports:
    # - "${PHPMYADMIN_PORT:-7865}:80"
  labels:
    - "traefik.enable=true"
    - "traefik.http.routers.phpmyadmin.rule=Host(`$DOCKER_TRAEFIK_HOST_PHPMYADMIN`)"
    - "traefik.http.routers.phpmyadmin.entrypoints=web"
    - "traefik.http.routers.phpmyadmin-rtr.tls=true"
    - "traefik.port=$PHPMYADMIN_PORT"
  volumes: 
    - /sessions

В этой конфигурации $DOCKER_IMAGE_PHPMYADMIN — имя образа phpmyadmin, а $PHPMYADMIN_PORT — 7865 из моего файла .env. Вы можете изменить его по своему усмотрению. $DOCKER_TRAEFIK_HOST_PHPMYADMIN — имя хоста, например phpmyadmin.example.com

В этом примере я заблокировал доступ к порту и могу нормально получить доступ к поддомену. Та же настройка для LAMP, ELK, Node и React в моем проекте.

Связанный контент