Google Cloud PostgreSQL 无法从服务器连接



我有一个Google Cloud PostgreSQL实例。在 GCP 上的"连接"选项卡中将它们列入白名单后,我可以通过多个本地 IP 地址连接到它。我开发了我的应用程序,现在,当我尝试从生产 Web 服务器连接实例时,它说:

致命错误:未捕获的 PDOException:SQLSTATE[08006] [7] 无法连接到服务器:连接超时 服务器是否在主机"34.65.215.xx"上运行并接受端口 5432 上的 TCP/IP 连接?

我正在使用的PHP是:

$wpdb2 = new PDO('pgsql:host=34.65.215.xx;port=5432;dbname=xxxxx', 'postgres', 'xxxxxx');

我写信给我的网络服务器支持,他们通过在 34.65.215.xx IP 上的输出中打开 5432 端口来回答我。之后,我仍然无法连接到实例。

strace说:

0.000120 socket(PF_INET, SOCK_STREAM, IPPROTO_IP) = 4
0.000043 setsockopt(4, SOL_TCP, TCP_NODELAY, [1], 4) = 0
0.000031 fcntl(4, F_SETFL, O_RDONLY|O_NONBLOCK) = 0
0.000024 fcntl(4, F_SETFD, FD_CLOEXEC) = 0
0.000027 connect(4, {sa_family=AF_INET, sin_port=htons(5432), sin_addr=inet_addr("34.65.215.xx")}, 16) = -1 EINPROGRESS (Operation now in progress)
0.000112 poll([{fd=4, events=POLLOUT|POLLERR}], 1, 30000) = 1 ([{fd=4, revents=POLLOUT|POLLERR|POLLHUP}])
15.270417 getsockopt(4, SOL_SOCKET, SO_ERROR, [110], [4]) = 0
0.000103 close(4) = 0

我只是不知道下一步该怎么做...

有人可以帮助理解吗?

正如大家建议的那样,您可以检查网络服务器的公共IP地址。要了解它,您可以使用@kurtisvg提供的网页,或者从linux终端可以使用以下内容:

$ curl ifconfig.co

此外,如果你的Web服务器操作系统是Red Hat或任何分支(CentOS,Scientific Linux等(,你应该配置SELinux布尔值httpd_can_network_connect_db将其更改为1,以将您的PHP应用程序连接到另一台服务器中的任何数据库。

$ sudo setsebool -P httpd_can_network_connect_db 1

现在一切应该一切正常,因此请尝试再次将您的 PHP 应用程序连接到您的 Cloud SQL 实例。

如果我的理解是正确的:

  • 你在公共 IP 34.65.215.xx 上有一个云 SQL 实例
  • 您有一个 PHP 脚本在 GCP 外部托管的网络服务器上运行

在GCP上的"连接"选项卡中将其列入白名单后,我可以通过多个本地IP地址连接到它

是否已将 Web 服务器主机 IP 添加到云 SQL IP 白名单中?

建议

您是否考虑过在 GCP 上运行工作负载?例如,AppEngine。您将能够强制执行安全性。

因为在此设计中,这不是一个好的做法,并且安全级别非常低。

后端服务器和数据库之间的延迟也可能是一个问题。

检查以确保您当前的 IP 地址已列入实例的白名单。IP 地址可以定期更改。您可以通过访问 https://whatismyipaddress.com/等工具来检查您的公共 IP。

如果想要一种更安全的连接方式,而无需将 IP 列入白名单,请考虑使用云 SQL 代理。

相关内容

  • 没有找到相关文章

最新更新