我正在尝试解决一个网站错误,目前该错误仅在生产中出现。由于我无法关闭该环境,因此我尝试创建一个尽可能接近的副本。该网站基于 Kentico 11,在 Amazon EC2 t2 实例上的 Windows Server 2019 Datacenter 上运行,由 RDS SQL Server Web Edition 实例支持。为了创建测试环境,我对数据库进行了备份转储并将其还原到实例上的其他数据库,并创建 EC2 的 AMI 并使用它来启动新的 EC2 实例。
这个过程在过去已经成功过几十次,但是这一次,我今天到目前为止已经做了四次,新实例上的网站将不会返回任何内容,除了通用的 404 状态(即 IIS 本身返回的最小 404 页面,而不是 Kentico 返回的页面)。奇怪的是,这些对副本的请求没有记录在其 IIS 请求日志中。除了 IP 地址和数据库连接字符串等详细信息之外,我看不出生产实例和副本之间有什么不同,我也想象不出为什么会有差异;我在启动新实例前几分钟才创建了 AMI。我花了一整天的时间再次尝试,并在 Google 上搜索,直到手指麻木……有人对副本无法按预期工作的原因或如何使其正常工作有任何想法或建议吗?
编辑:想知道如果 IIS 没有响应 HTTP 请求,那么响应的是什么,我查看了响应标头,其中包括:Server: Microsoft-HTTPAPI/2.0
。我发现了这个:https://docs.microsoft.com/en-us/windows/win32/http/http-api-start-page这实际上只会加深谜团。什么东西会干扰 IIS 的运行?又是如何干扰的?而且,既然此实例是从基于工作站点的 AMI 启动的,那么这种变化是如何发生的呢?
编辑:我更新了标题以便更清晰
答案1
经过一番挖掘网络状态和任务列表并确定系统进程正在响应端口 80 和 443 上的请求,我有一个我应该早点想到的想法,并查看了在执行本地主机复制生产服务器上的请求。令我惊讶的是,这是同一件事:返回 404,返回内容是某个标识为Microsoft-HTTPAPI/2.0
……的程序。最后我认为这可能与 IIS 端口绑定中的主机名有关。
果然,当我编辑这些绑定以匹配复制主机的 DNS 名称(而不是被复制的服务器的名称)时,请求由 IIS 处理,并且就 Web 服务而言,一切都恢复正常。
另一个警示故事是关于一个缺乏管理经验的开发人员不得不尝试解决管理方面的谜团。