
我有一個在 godaddy.com 註冊的網域(例如 example.com)並使用 AWS 進行託管。 Godaddy 上的名稱伺服器後來加入 AWS
我安裝了 ubuntu (t2.medium) apache 伺服器。我在 Docker 中的專案安裝了 LAMP、ELK、Node、React 和 Postgres。一切都可以使用直接連接埠在本機系統上運行。我的專案中開啟的連接埠很少,即
- example.com:3000 React 應用程式 [前端]
- example.com:5601 kibana 應用程式
- example.com:5050 postgadmin 應用程式
- example.com/radius php 應用程式 [後端]
- example.com:8080 phpmyadmin 應用程式
我想要的網址是:
- example.com:3000 反應應用程式 [前端] =>http://example.com
- example.com:5601 kibana 應用 =>http://kibana.example.com
- example.com:5050 postgadmin 應用程式 =>http://postgadmin.example.com
- example.com/radius php applicatinn [後端] =>http://example.com/radius
- example.com:8080 phpmyadmin 應用程式 =>http://phpmyadmin.example.com
透過新增單獨的conf檔案在apache上嘗試反向代理,例如
預設設定檔
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot "/var/www/html"
ServerName example.com
<Directory "/var/www/html/">
AllowOverride all
</Directory>
</VirtualHost>
基巴納設定檔
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_代理)
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 設定相同。