MAC LOCALHOST - Apache在解析本地主机之前等待60秒

iyfamqjs  于 2023-03-19  发布在  Apache
关注(0)|答案(1)|浏览(137)

我最近使用Homebrew(Apache/PHP)在本地主机环境中设置了我的Macbook Pro M1运行Ventura。我的网站上的所有内容都是本地的,除了一个远程MySQL数据库。我使用本地主机(http://localhost)作为我的URL。
我知道数据库正在连接,因为当页面最终加载时,我正在从中获取数据。
加载站点需要很长时间,并且有几个 AJAX 调用最终超时并失败,使得localhost几乎毫无用处。
没有Apache错误,没有PHP错误,浏览器控制台没有错误。
不过我注意到在浏览器控制台的网络标签中,localhost需要60秒才能开始加载页面。这就解释了为什么它这么慢,以及为什么 AJAX 调用失败(因为这些调用在初始化后也必须等待整整60秒)。请参见随附的屏幕截图。
是什么原因导致的?

rvpgvaaj

rvpgvaaj1#

很可能本地代码在向浏览器提供页面内容之前对MySQL数据库进行了查询。此查询似乎在等待DNS超时以查找您地址的PTR。
反向DNS查询可以在多个位置生成。

本地

  • 本地apache服务器可能在LogFormat中有%h(如果有,请替换为%a)或已启用HostnameLookups(禁用它)。
  • PHP代码可能使用[gethostbyaddr][1]

很少

  • 远程MySQL服务器可能有skip_name_resolve,它强制服务器解析客户端的DNS名称,要求您将MySQL数据库主机设置为disable reverse DNS

要禁用DNS主机名查找,请在启用skip_name_resolve系统变量的情况下启动服务器。在这种情况下,服务器仅使用IP地址而不使用主机名来将连接主机与MySQL授权表中的行进行匹配。只能使用在这些表中使用IP地址指定的帐户。(如果不存在指定客户机IP地址的帐户,则客户机可能无法连接。)

  • 如果您无法在MySQL服务器上禁用它,请让您的ISP为您的IP地址分配匹配的PTR和A/AAAA记录。

例如,将添加到www.example.com的DNSexample.com:

client IN A 203.0.113.10

添加到113.0.203.in-addr.arpa:

10 IN PTR client.example.com.

页面加载的基本工作流:

  • 客户端发起连接,Web服务器接受。
  • 如果服务器配置为查找名称,请立即执行此操作。
  • 现在调用服务器代码以动态生成代码。
  • 如果该代码使用gethostbyaddr,则该语言要求解析器查找名称并返回它。
  • 该代码执行SQL查询,数据库服务器接受该查询。
  • 如果数据库服务器配置为查找名称,请立即执行此操作。

在进行查找的任何这些示例中,名称服务器执行以下步骤:

  • 首先查询该高速缓存,如果信息没有过期,则返回它。
  • 如果该信息已过期、最近出现故障或不存在,则从Internet名称服务器查找该信息。
  • 如果查询没有立即回复,则回复错误或一些无效代码;然后等待并周期性地重试。
  • 当查询超时时(通常在45到70秒内),使用不存在的域进行回复,并将条目保存为无效。

相关问题