无法使用 Docker 和 Caddy 服务器连接到 EC2 实例上的端口 53589
Unable to connect to port 53589 on EC2 instance using Docker and Caddy server
我正在尝试做什么
在 AWS EC2 实例上托管 Taskwarrior Server,并通过子域连接到它(例如 task.mydomain.dev)。
Taskwarrior 服务器在端口 53589 上运行。
涉及技术
- AWS EC2:服务器 (Ubuntu)
- Caddy 服务器:用于为 EC2 实例上的每个应用程序创建反向代理
- Docker (docker-compose): 用于启动应用程序,包括 Caddy 服务器和 Taskwarrior 服务器
- Cloudflare:DNS 托管和 SSL 证书
我是如何尝试做到这一点的
我有:
- 允许实例安全策略中端口 22、80、443 和 53589 的传入连接
- 给 EC2 实例一个弹性 IP
- 设置 DNS 记录(task.mydomain.dev 是 CNAME 到 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
/opt/caddy/Caddyfile:
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
returns:
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
returns:
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
returns:
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
returns:
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:53589
和 reverse_proxy localhost:53589
。发生相同的错误。
- 正在删除子域的 CNAME 记录。发生相同的错误
有没有人知道发生了什么或者可以指出正确的方向?
如果您尝试在端口 not on the standard list 上代理 Cloudflare 上的 HTTPS 流量,您将需要遵循以下选项之一:
- 在所需端口
53589
上将其设置为 Cloudflare HTTPS Spectrum app
- 将Cloudflare DNS选项卡中的记录设置为Gray cloud(换句话说,它只会执行DNS解析——这意味着您需要自己管理证书)
- 更改您的服务,使其侦听第 (1) 点文档中列出的标准 HTTPS 端口之一
我正在尝试做什么
在 AWS EC2 实例上托管 Taskwarrior Server,并通过子域连接到它(例如 task.mydomain.dev)。
Taskwarrior 服务器在端口 53589 上运行。
涉及技术
- AWS EC2:服务器 (Ubuntu)
- Caddy 服务器:用于为 EC2 实例上的每个应用程序创建反向代理
- Docker (docker-compose): 用于启动应用程序,包括 Caddy 服务器和 Taskwarrior 服务器
- Cloudflare:DNS 托管和 SSL 证书
我是如何尝试做到这一点的
我有:
- 允许实例安全策略中端口 22、80、443 和 53589 的传入连接
- 给 EC2 实例一个弹性 IP
- 设置 DNS 记录(task.mydomain.dev 是 CNAME 到 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
/opt/caddy/Caddyfile:
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
returns: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
returns: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
returns: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
returns: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:53589
和reverse_proxy localhost:53589
。发生相同的错误。 - 正在删除子域的 CNAME 记录。发生相同的错误
有没有人知道发生了什么或者可以指出正确的方向?
如果您尝试在端口 not on the standard list 上代理 Cloudflare 上的 HTTPS 流量,您将需要遵循以下选项之一:
- 在所需端口
53589
上将其设置为 Cloudflare HTTPS Spectrum app
- 将Cloudflare DNS选项卡中的记录设置为Gray cloud(换句话说,它只会执行DNS解析——这意味着您需要自己管理证书)
- 更改您的服务,使其侦听第 (1) 点文档中列出的标准 HTTPS 端口之一