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

如何解决外部Node.js实例连接Cloud SQL时的[DEP0123]弃用警告?

解决Node.js连接Cloud SQL PostgreSQL时的TLS ServerName弃用警告

问题背景

我在Debian 9.9(stretch)环境下运行Node 12.7.0服务器,连接Cloud SQL PostgreSQL 11(beta)时,碰到了这条烦人的弃用警告:

(node:18101) [DEP0123] DeprecationWarning: Setting the TLS ServerName to an IP address is not permitted by RFC 6066. This will be ignored in a future version

根源在于Google Cloud SQL仅提供公网IP用于外部连接,而Node.js的TLS实现现在严格遵循RFC 6066规范,不允许将IP地址作为TLS握手的ServerName。

已验证的临时解决方案

我目前通过给Cloud SQL的公网IP绑定自定义子域名解决了这个问题:

  • 在公司的DNS服务器上添加一条A记录,把一个子域名(比如cloud-sql-db.example.com)指向Cloud SQL的公网IP
  • 修改Node.js代码里的数据库连接配置,用这个子域名代替IP地址

因为我的外部服务器只是短期使用,这个临时方案完全能满足需求,而且彻底消除了弃用警告。

关于更优方案的探讨

目前来看,由于Google Cloud SQL没有提供官方的服务器域名(仅给出IP),绑定自定义域名是最直接的可行方案。如果是长期运行的场景,可以考虑以下替代方向:

  • 使用Cloud SQL内部连接:如果你的Node.js服务器也部署在Google Cloud的VPC网络内,可以通过VPC peering或者私有IP连接Cloud SQL,这种方式不需要公网IP,自然也不会触发TLS ServerName的问题
  • 客户端配置优化:我曾调研过node-postgres客户端的配置选项,尝试绕过ServerName的强制设置,但目前客户端没有提供相关开关,相关需求也已经提交了Issue跟进

总结

如果是短期外部连接场景,给IP绑定自定义子域名是成本最低、见效最快的方案;长期场景优先考虑Cloud SQL的内部连接方式,从根源上避免公网IP带来的TLS规范问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:50:59