尝试访问本地主机中的数据库时如何解决“错误:服务器不支持 SSL 连接”?
Posted
技术标签:
【中文标题】尝试访问本地主机中的数据库时如何解决“错误:服务器不支持 SSL 连接”?【英文标题】:How to fix "Error: The server does not support SSL connections" when trying to access database in localhost? 【发布时间】:2019-06-15 13:24:17 【问题描述】:我正在关注 Heroku 的 node.js tutorial 来配置 Postgres 数据库。 创建一个简单的表并连接到 localhost:5000/db 后,我收到一条错误消息“错误:服务器不支持 SSL 连接”。
我一直在寻找解决方案几个小时,但似乎无法解决它。对你的帮助表示感谢。谢谢!
【问题讨论】:
你在postgresql.conf
中设置ssl = on
,提供服务器证书并重启服务器吗?
【参考方案1】:
在这里,我提供了问题的解决方法,而不是这篇文章的标题。总体而言,对帖子的更好回答可能会解决为本地计算机配置 SSL 的问题。
我来到这里是为了解决完成问题中提到的 Heroku 教程并设置 Postgres 数据库以在本地和远程工作的问题。
const pool = new Pool(
connectionString: process.env.DATABASE_URL || 'postgresql://postgres:<your admin password>@localhost:5432/<your db name>',
ssl: process.env.DATABASE_URL ? true : false
)
我的想法是在我部署的应用程序上使用 SSL,但在本地计算机上完全避开 SSL。通过简单地跳过本地机器上的 SSL 配置,我可以集中精力开发一个仍然使用 Heroku 内置 SSL 的工作应用程序。
我使用 Heroku 环境变量来检测他们的环境与我自己的环境,并在上面的代码示例中相应地选择值。对我来说,这在本地和远程都有效。
【讨论】:
【参考方案2】:我来这里不是为了寻找本地主机解决方案(我想连接到我的在线数据库),但是,这是第一个谷歌结果,所以我将为 not localhost 这里有问题:
查看 .env 文件以复制您在 heroku 环境中设置的环境变量;看这里:https://devcenter.heroku.com/articles/heroku-local#set-up-your-local-environment-variables
【讨论】:
【参考方案3】:在教程结束后,我在设置本地环境时遇到了同样的问题。坚持命令heroku local
启动我的服务器为我修复了它。此命令在教程的Run the app locally 部分中有详细说明。
在我的例子中,我使用 React + Webpack 添加了一个 Express 服务器和一个客户端。我用于本地开发的 package.json
脚本如下所示:
"dev": "run-p dev:*",
"dev:server": "heroku local -f Procfile.dev",
"dev:webpack": "webpack --watch --config webpack.dev.js --mode development",
run-p
就是从npm-run-all
同时运行所有以dev
开头的脚本。
服务器使用heroku local
命令和特定的Procfile
进行本地开发(使用-f
标志来执行此操作),我使用nodemon
在本地启动服务器以监视更改(请参阅@987654333 @ 下面)。
webpack 脚本使用 React 在客户端构建并监视更改。
Procfile.dev
用于本地开发:
web: nodemon index.js
Procfile
用于生产:
web: node --optimize_for_size --max_old_space_size=920 --gc_interval=100 index.js
然后从Provision a database 部分连接到数据库的相同代码对我有用:
const Pool = require('pg');
const pool = new Pool(
connectionString: process.env.DATABASE_URL,
ssl:
rejectUnauthorized: false
);
【讨论】:
如果这不起作用,还要检查您传递给 Pool 实例的connectionString
是否正确(而不是未定义),这将触发相同的错误。【参考方案4】:
这是 Heroku 今天在 2021 年工作的新形式,他们对连接进行了一些小的更正。
const pool = (() =>
if (process.env.NODE_ENV !== 'production')
return new Pool(
connectionString: process.env.DATABASE_URL,
ssl: false
);
else
return new Pool(
connectionString: process.env.DATABASE_URL,
ssl:
rejectUnauthorized: false
);
)();
他们改变了一点,使用这种方式你可以保持本地和 heroku 可用。
【讨论】:
【参考方案5】:常量池 = 新池( 连接字符串:process.env.DATABASE_URL || 'postgresql://postgres:@localhost:5432/', ssl:process.env.DATABASE_URL?真假 )
在你的代码中,你添加这个带有凭据和连接字符串详细信息的 sn-p,这里 process.env.DATABASE_URL 来自环境文件,如果它在那里,它将启用 ssl 模式,否则在没有 ssl 的本地它可以工作.请确保,您将仅提及本地以外的环境变量。所以在这两种环境下它都可以工作。
【讨论】:
请在您的回答中提供更多详细信息。正如目前所写的那样,很难理解您的解决方案。以上是关于尝试访问本地主机中的数据库时如何解决“错误:服务器不支持 SSL 连接”?的主要内容,如果未能解决你的问题,请参考以下文章