尝试访问本地主机中的数据库时如何解决“错误:服务器不支持 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 连接”?的主要内容,如果未能解决你的问题,请参考以下文章

本地主机 xampp 上的 500 内部服务器错误

如何从远程计算机(不是本地主机)访问 MySQL?

如何允许本地主机之外的访问

使用 xampp 和 ngrok 访问本地虚拟主机时禁止访问

如何从本地主机查看 ReactJS 中的图像

我无法从网络中的其他设备访问本地主机的原因是啥?