AWS RDS PostgreSQL无法通过Node.js+Sequelize连接问题求助
解决Sequelize连接AWS RDS PostgreSQL的加密错误
问题分析
报错no pg_hba.conf entry for host "...", no encryption明确说明:你的Node.js/Sequelize连接请求未使用加密传输,但AWS RDS PostgreSQL实例的pg_hba.conf配置要求必须通过SSL加密连接。
而psql能成功连接,是因为psql在连接AWS RDS端点时,默认会自动启用SSL(或你的本地psql配置中已设置sslmode=require),满足了RDS的加密要求。
解决方案
在Sequelize的配置中添加SSL强制启用选项,具体修改你的数据库配置代码:
const { Sequelize } = require("sequelize"); const { PGHOST, PGUSER, PGDATABASE, PGPASSWORD } = require("../../env"); const sequelize = new Sequelize(PGDATABASE, PGUSER, PGPASSWORD, { host: PGHOST, dialect: "postgres", operatorsAliases: 0, logging: false, pool: { max: 5, min: 0, acquire: 30000, idle: 10000, }, // 添加以下SSL配置 dialectOptions: { ssl: { require: true, rejectUnauthorized: false // AWS RDS使用自签名证书,本地无需验证 } } }) const connectionTest = async () => { try { await sequelize.authenticate(); console.log('Connection has been established successfully.'); } catch (error) { console.error('Unable to connect to the database:', error); } } connectionTest()
补充说明
require: true:强制Sequelize使用SSL连接,匹配RDS的加密要求rejectUnauthorized: false:跳过证书验证,因为AWS RDS的PostgreSQL实例使用官方自签名证书,本地环境默认无对应根证书信任链,开启此选项可避免证书验证失败。若你的环境已配置AWS根证书信任,也可设置为true并指定证书路径。
内容的提问来源于stack exchange,提问作者Abhinay Narayan Singh
相关产品推荐
相关产品推荐

