You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Cloudflare隧道搭配Postgres的JDBC连接问题求助

问题分析与解决方案

核心概念误解

PostgreSQL是TCP协议的数据库服务,PGadmin4是HTTP协议的Web管理工具。Cloudflare Tunnel对两类服务的处理逻辑完全不同:

  • PGadmin4作为HTTP服务,Cloudflare Tunnel通过HTTPS路由转发流量,因此可直接用HTTPS URL访问;
  • PostgreSQL作为TCP服务,不能通过HTTPS URL进行JDBC连接——JDBC的PostgreSQL驱动基于原生TCP通信,不支持HTTP/HTTPS协议封装。

具体解决步骤

1. 修正Cloudflare Tunnel的PostgreSQL服务配置

确保在Cloudflare Tunnel中,PostgreSQL的服务规则配置为TCP类型(而非HTTP):

  • 登录Cloudflare Zero Dash,找到目标隧道;
  • 添加/修改PostgreSQL对应规则:
    • 外部配置:选择TCP,指定外部端口(可自定义或使用Cloudflare分配的端口,避开80/443等HTTP端口);
    • 内部配置:指向PostgreSQL容器地址(如postgres:5432,若隧道与PostgreSQL在同一Docker网络)或宿主机映射端口(如localhost:5432)。

2. 构造正确的JDBC连接URL

使用Cloudflare隧道域名+TCP端口的格式,示例:

jdbc:postgresql://dbserver.urhost.com:12345/postgres

将12345替换为你实际配置的TCP外部端口。

3. 验证Docker与PostgreSQL配置正确性

  • Docker端口映射:若隧道运行在宿主机,需在PostgreSQL容器启动命令中添加-p 5432:5432;若隧道与PostgreSQL在同一Docker网络,可直接用容器名+端口访问,无需宿主机映射。
  • PostgreSQL权限配置:
    • 修改postgresql.conf,设置listen_addresses = '*'以允许外部IP连接;
    • 修改pg_hba.conf,添加规则允许Cloudflare IP段或所有IP连接(通过Cloudflare隧道的流量相对安全):
      host all all 0.0.0.0/0 md5
      
    • 重启PostgreSQL容器使配置生效。

4. 测试TCP连通性

先用命令行工具验证Cloudflare TCP隧道的连通性:

telnet dbserver.urhost.com 12345
# 或使用nc
nc -zv dbserver.urhost.com 12345

连通正常后再尝试JDBC连接。

内容的提问来源于stack exchange,提问作者Sinio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 19:12:54