【问题标题】:Google Cloud PostgreSQL can't connect from serverGoogle Cloud PostgreSQL 无法从服务器连接
【发布时间】:2020-03-22 03:44:21
【问题描述】:

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

致命错误:未捕获的 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

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

谁能帮忙理解一下?

【问题讨论】:

    标签: php google-cloud-platform google-cloud-sql


    【解决方案1】:

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

    $ curl ifconfig.co
    

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

    $ sudo setsebool -P httpd_can_network_connect_db 1
    

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

    【讨论】:

      【解决方案2】:

      如果我的理解是正确的:

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

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

      您是否在 Cloud SQL IP 白名单中添加了您的网络服务器主机 IP?

      建议

      您是否考虑过在 GCP 上运行您的工作负载?以应用引擎为例。您将能够强制执行安全性。

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

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

      【讨论】:

      • 问题:您是否在 Cloud SQL IP 白名单中添加了您的 Web 服务器主机 IP?答:当然有!我不明白为什么我可以从每个 IP 进行连接,但不能从网络主机进行连接...上瘾了,我现在无法将网络服务器从其托管中移出,我正在尝试从那里连接 GCP...为什么不工作?
      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2013-06-15
        • 2020-09-25
        • 1970-01-01
        • 2020-01-24
        • 1970-01-01
        • 2019-10-08
        • 2020-12-31
        • 2013-05-07
        • 1970-01-01
        相关资源
        最近更新 更多