
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은 다음과 같습니다.
- example.com:3000 반응 앱 [프론트엔드] =>http://example.com
- example.com:5601 키바나 앱 =>http://kibana.example.com
- example.com:5050 대학원생 앱 =>http://postgradmin.example.com
- example.com/radius php applicatinn [백엔드] =>http://example.com/radius
- example.com:8080 phpmyadmin 앱 =>http://phpmyadmin.example.com
몇 가지를 시도했지만 아무것도 작동하지 않습니다. 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에 하위 도메인을 추가했습니다.
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에 대해 동일한 설정을 사용합니다.