gpt4 book ai didi

postgresql - 为什么我的 Web 应用程序使用 ipv6 连接到本地 postgres

转载 作者:行者123 更新时间:2023-11-29 11:36:08 28 4
gpt4 key购买 nike

所以我一直在开发一个连接到另一台机器上的 postgresql 服务器的 Web 应用程序。一切正常。

然后我将 Web 应用程序部署到运行 postgresql 服务器的同一台机器上并收到一条错误消息:

FATAL: 28000: no pg_hba.conf entry for host "fe80::ccee:154f:18f5:418f%11", user "myuser", database "mydb", SSL off 

我的 pg_hba-conf 已经有这一行:

# IPv6 local connections:
host all all ::1/128 md5

那应该是 ipv6 的环回地址吧?

我可以通过添加这一行(纯猜测)来修复它:

#host   all             all             fe80::/16               md5

我怀疑这可以通过让每个人连接来实现吗?

那么问题是为什么它会使用 ipv6 而不是 ipv4?

为什么环回不起作用?

最佳答案

当您使用主机名连接时,首先发生的事情之一是 libpq(postgresql 客户端库)将尝试解析主机名。在大多数情况下,这意味着通过 DNS 查找它。返回的任何地址都将用于连接。

我猜在您的情况下,主机名解析到的地址是 IPv6 地址。您对 ping 的实验似乎支持了这一假设。

所以,尽管在同一台机器上,它是通过主机的 IPv6 地址连接的。就服务器而言,它会看到来自主机 IPv6 地址的连接。此地址不是::1/128 (localhost),因此它与 pg_hba.conf 中的条目不匹配。

解决此问题的一种方法是将应用程序的连接字符串更改为本地主机(或::1/128,甚至 127.0.0.1)。这将导致 pg_hba.conf 中的环回条目被选中。

如果您使用的是支持 UNIX 域套接字的平台,并且当您连接到同一主机上的服务器时,最好从连接字符串中完全删除主机参数。在那种情况下,libpq 将使用本地 UNIX 域套接字连接到服务器,这比通过 IP 地址在本地连接更有效。但是,由于您使用的是 .NET,因此该解决方案可能不适用。

关于postgresql - 为什么我的 Web 应用程序使用 ipv6 连接到本地 postgres,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29119161/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com