无法连接到主机本身

无法连接到主机本身

好吧,问题很简单。我有一个基于 Apache 的网站,并尝试从同一台服务器执行此网站的 cron 作业。假设我的网站http://example.com并且 cronjob 是

/usr/bin/curl http://example.com/cron.php

它不起作用,错误是“curl:(7)无法连接到主机”。

为什么会发生这种情况?

PS:该网站运行正常,可从任何其他外部机器/客户端访问。

以下是 iptables -S 的输出

-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 2222 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited

Ping 失败:(ping example.com)——当然,这里我使用了我的服务器域:

134 packets transmitted, 0 received, 100% packet loss, time 136759ms

详细 curl -v :

* About to connect() to myserver.com port 443 (#0)
*   Trying x.x.x.x... Connection timed out
* couldn't connect to host
* Closing connection #0
curl: (7) couldn't connect to host

xxxx是我的主机的外部IP。

traceroute myserver.com 的结果

traceroute to myserver.com (x.x.x.x), 30 hops max, 60 byte packets
 1  * * *
 2  * * *
 3  * * *
 4  * * *
 5  * * *
 6  * * *
 7  * * *
 8  * * *
 9  * * *
10  * * *
11  * * *
12  * * *
13  * * *
14  * * *
15  * * *
16  * * *
17  * * *
18  * * *
19  * * *
20  * * *
21  * * *
22  * * *
23  * * *
24  * * *
25  * * *
26  * * *
27  * * *
28  * * *
29  * * *
30  * * *

答案1

这并不是您当前问题的答案,但它会使整个问题变得毫无意义,因为您无论如何都试图从运行您网站的同一主机触发脚本:

当您需要运行 PHP 脚本时,cron通常最好从 PHP 命令行界面运行它们,而不是向脚本发出 Web 请求。根据 PHP 二进制文件的位置,将您的批处理作业更改为:

/usr/bin/php -q -f /path/to/cron.php

这允许您:

  • 将批处理作业放置在 Web 根目录之外。
  • 使用不同于您的 Web 服务器的 UID 的有效 UID 来运行批处理作业。
  • 避免 Web 服务器施加的超时(和其他限制)。
  • 当您网站的 DNS 名称未指向服务器上的本地 IP 地址时,可避免出现任何问题。
  • 避免建立 TCP 和/或 TLS 连接的开销。

和更多。

答案2

仔细查看实际运行的 iptables 配置

ipatables -L -vn

并确保没有任何东西阻塞运行 curl/ping 命令的系统的源 IP - 采取适当的措施。

如果那里什么都没有,那么系统之间的上游可能被阻塞了。由于 ping 被阻止,我想你可以尝试地铁

mtr -4 example.com

它可能会显示某个网站阻止了你。

您确定 example.com 的 IP 地址也是正确的吗?

答案3

我意识到这是一个“发夹 DNS”问题。我猜最好的解决方案是配置 NAT,不要将我自己的外部 IP 的请求快捷方式设置为本地 IP...但我的提供商仍然没有这样做,我暂时通过以下方式修复了它

nano /etc/hosts

添加了一行

y.y.y.y   myserver.com

其中 yyyy 是我的本地地址。

相关内容