我有一个在 localhost / 端口 80 上运行 apache 的 ubuntu 服务器。它的域名是 sub.domain.com
如果我发出 curl 请求http://本地主机在该机器上,它将立即出现“无法连接到主机”的错误。
如果我在该机器上向 sub.domain.com 发出 curl 请求,它将陷入无限循环,直到几分钟后超时。
如果我在另一台机器上的网络浏览器中打开 sub.domain.com,它会显示我的 html 页面。
如果我使用另一台机器向 sub.domain.com 发出 curl 请求,它就会连接。
这是怎么回事?
答案1
您的评论:“它监听 192.168.2.1,然后监听公共 IP。环回设备是 127.0.0.1”。因此,Apache不是正在监听 127.0.0.1?如果是这种情况,那就是您的问题。配置 Apache 以监听所有接口,或者至少将环回接口添加到 Apache 正在监听的接口。
下一个问题:“如果我在该机器上向 sub.domain.com 发出 curl 请求,它将陷入无限循环,直到几分钟后超时。”当您遇到什么情况时ping sub.domain.com
?这个问题感觉像是该机器上的名称解析问题,因为您可以从另一台机器成功连接。
答案2
您可能需要使用 curl 指定主机标头,否则 Apache 不知道要显示什么页面 - 取决于您如何设置 localhost 可能会显示 apache 默认页面,而您的虚拟主机(sub.domain.com)将显示您期望的页面。
尝试使用:
curl -H "Host:sub.domain.com" 127.0.0.1
答案3
从另一台机器执行ping sub.domain.com
并在响应中记录 IP 地址 (xxx.yyy.zzz.www)。然后从 apache 机器使用:
curl -H "Host:sub.domain.com" xxx.yyy.zzz.www