如何在 AWS 中设置子域的端口?

如何在 AWS 中设置子域的端口?

我有一个在 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 是:

我尝试了一些方法,但都没有用。在 route53 上 在此处输入图片描述

通过添加单独的 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 中添加了我的子域名:

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 的设置相同。

相关内容