0

我正在尝试做的事情

在 AWS EC2 实例上托管Taskwarrior 服务器,并通过子域(例如 task.mydomain.dev)连接到它。

Taskwarrior 服务器在端口 53589 上运行。

涉及技术

  • AWS EC2:服务器(Ubuntu)
  • Caddy Server:用于为 EC2 实例上的每个应用程序创建反向代理
  • Docker (docker-compose):用于启动应用程序,包括 Caddy 服务器和 Taskwarrior 服务器
  • Cloudflare:DNS 托管和 SSL 证书

我是如何尝试做到这一点的

我有:

  • 在实例的安全策略中允许端口 22、80、443 和 53589 的传入连接
  • 给 EC2 实例一个弹性 IP
  • 设置 DNS 记录(task.mydomain.dev 是 CNAME'd 到 mydomain.dev,mydomain.dev 有一个指向弹性 IP 的 A 记录)
  • 使用 Caddy 服务器在端口 53589 上为 task.mydomain.dev 设置反向代理
  • 按照说明设置 Taskwarrior 服务器(即创建证书;创建用户和组织;使用证书、身份验证和服务器信息更新 taskrc 文件;等)

配置文件

/opt/task/docker-compose.yml

version: '3.3'

services:
  taskd:
    image: connectical/taskd
    restart: always
    volumes:
      - /opt/task:/var/taskd
    ports:
      - 53589:53589

networks:
  default:
    external:
      name: caddy_net

/opt/caddy/docker-compose.yml

version: "3.4"

services:
  caddy:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: caddy
    restart: always
    ports:
      - 80:80
      - 443:443
    volumes:
      - ./config:/config
      - ./data:/data
      - ./Caddyfile:/etc/caddy/Caddyfile

networks:
  default:
    external:
      name: caddy_net

/选择/球童/球童文件:

task.mydomain.dev:53589 {
  reverse_proxy taskd:53589
  tls {
    dns cloudflare myCloudflareAPIkey
  }
}

实际发生了什么

  • 我无法连接到 task.mydomain.dev 上的端口 53589
    • 运行telnet task.mydomain.dev 53589超时
  • 我无法连接到 mydomain.dev 上的端口 53589
    • 运行telnet mydomain.dev 53589超时
  • 我可以通过 ssh 连接到 EC2 实例中的 127.0.0.1 端口 53589
    • telnet 127.0.0.1 53589从 EC2 实例运行成功连接
  • 我能够连接到 task.mydomain.dev 上的端口 80,但无法与 Taskwarrior 服务器同步
    • 运行task sync init返回:
      c: 1 Received record packet of unknown type 72
      Syncing with task.mydomain.dev:80
      
      Cannot perform this action while handshake is in progress.
      Sync failed.  Could not connect to the Taskserver.
      
  • 我能够连接到 task.mydomain.dev 上的端口 443,但无法与 Taskwarrior 服务器同步
    • 运行task sync init返回:
      Syncing with task.mydomain.dev:443
      
      Malformed message
      Sync failed.  Could not connect to the Taskserver.
      

我试图解决的问题

  • 将 Caddyfile 的第一行更改为:
    • task.mydomain.dev {task.mydomain.dev:80 {,然后连接到端口 80
      • 运行task sync init返回:
        c: 1 Received record packet of unknown type 72
        Syncing with task.mydomain.dev:80
        
        Cannot perform this action while handshake is in progress.
        Sync failed.  Could not connect to the Taskserver.
        
    • task.mydomain.dev {task.mydomain.dev:443 {,然后连接到端口 443
      • 运行task sync init返回:
        Syncing with task.mydomain.dev:443
        
        Malformed message
        Sync failed.  Could not connect to the Taskserver.
        
  • 将 Caddyfile 的第二行更改为reverse_proxy 127.0.0.1:53589,reverse_proxy 0.0.0.0:53589reverse_proxy localhost:53589. 发生同样的错误。
  • 删除子域的 CNAME 记录。出现同样的错误

有谁知道发生了什么或者可以指出我正确的方向?

4

1 回答 1

1

如果您尝试在不在标准列表中的端口上代理 Cloudflare 上的 HTTPS 流量,您将需要遵循以下选项之一:

  1. 在所需端口上将其设置为Cloudflare HTTPS Spectrum 应用程序53589
  2. 将Cloudflare DNS选项卡中的记录设置为灰色云(换句话说,它只会执行 DNS 解析 - 这意味着您需要自己管理证书)
  3. 更改您的服务,使其侦听第 (1) 点文档中列出的标准 HTTPS 端口之一
于 2021-12-28T13:35:50.050 回答