我有一个在 godaddy.com 注册的域名(例如 example.com),并使用 AWS 进行托管。Godaddy 上的名称服务器后来添加到了 AWS 中。
我安装了 ubuntu (t2.medium) apache 服务器。我在 Docker 中的项目安装了 LAMP、ELK、Node、React 和 Postgres。一切都在本地系统上使用直接端口运行。我的项目中打开了几个端口,即
- example.com:3000 react app [前端]
- example.com:5601 kibana 应用程序
- example.com:5050 postgradmin 应用程序
- example.com/radius php 应用程序 [后端]
- example.com:8080 phpmyadmin 应用程序
我想要的 URL 是:
- example.com:3000 react app [前端] =>http://example.com
- example.com:5601 kibana 应用程序 =>http://kibana.example.com
- example.com:5050 postgadmin 应用程序 =>http://postgradmin.example.com
- example.com/radius php 应用程序 [后端] =>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>
kibana.conf
Listen 5601
<VirtualHost *:5601>
ServerAdmin [email protected]
ServerName kibana.example.com
</VirtualHost>
配置文件
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 的设置相同。