AWS에서 하위 도메인에 대한 포트를 설정하는 방법은 무엇입니까?

AWS에서 하위 도메인에 대한 포트를 설정하는 방법은 무엇입니까?

godaddy.com에 등록된 도메인(예: example.com)이 있고 호스팅에 AWS를 사용합니다. 나중에 AWS에 추가된 Godaddy의 네임서버

여기에 이미지 설명을 입력하세요

우분투(t2.medium) 아파치 서버가 설치되어 있습니다. Docker의 내 프로젝트에는 LAMP, ELK, Node, React 및 Postgres가 설치되어 있습니다. 모든 것이 직접 포트를 사용하여 로컬 시스템에서 작동합니다. 내 프로젝트에 열려 있는 포트가 거의 없습니다.

  • example.com:3000 반응 앱 [프론트엔드]
  • example.com:5601 키바나 앱
  • example.com:5050 대학원생 앱
  • example.com/radius PHP 애플리케이션 [백엔드]
  • example.com:8080 phpmyadmin 앱

내가 원하는 URL은 다음과 같습니다.

몇 가지를 시도했지만 아무것도 작동하지 않습니다. 53번 국도에서 여기에 이미지 설명을 입력하세요

예를 들어 별도의 conf 파일을 추가하여 Apache에서 역방향 프록시를 시도했습니다.

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>

EC2에서 docker-compose up을 실행하면,http://example.com/radius잘 작동합니다. 그러나 다른 사람들은 그렇지 않습니다(예:http://kibana.example.com). 그러나 포트로 직접 시도하면(예: example.com:5601) 작동합니다. 그런데 포트가 있는 도메인이 아닌 하위 도메인을 사용하고 싶습니다.

그렇게하는 방법?

설명에 나온 대로 역방향 프록시를 시도했지만 제대로 작동하지 않습니다.

답변1

해결책을 찾았습니다. 이 접근 방식이 잘못된 경우 의견을 보내주세요.

AWS Route53에 하위 도메인을 추가했습니다.

aws-route53

docker-compose.yml 파일에 추가됨트래픽동일한 네트워크에 다른 이미지를 추가했습니다(t2_proxy)

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는 내 .env 파일의 traefik 이미지 이름입니다. 이미지 이름을 추가할 수 있으며 $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는 내 .env 파일의 7865입니다. 원하는대로 변경할 수 있습니다. $DOCKER_TRAEFIK_HOST_PHPMYADMIN은 호스트 이름입니다(예: phpmyadmin.example.com).

이 예에서는. 포트 접근을 차단해 놓았으니 서브도메인에 제대로 접근이 가능합니다. 내 프로젝트의 LAMP, ELK, Node 및 React에 대해 동일한 설정을 사용합니다.

관련 정보