Назад | Перейти на главную страницу

Не могу подключиться к самому хосту

Что ж, проблема простая. У меня есть сайт, основанный на apache, и я пытаюсь выполнить задание cron на этом сайте с того же сервера. Скажем мой сайт http://example.com и cronjob

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

Не работает, ошибка «curl: (7) не удалось подключиться к хосту».

Почему это могло произойти?

P.S. Сайт работает нормально и доступен с любого другого внешнего компьютера / клиента.

Вот результат 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

x.x.x.x - это внешний 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  * * *

Не совсем ответ на текущую проблему, но она будет всем вопрос спорной, так как вы пытаетесь запустить скрипт из того же хоста работает ваш сайт в любом случае:

Когда вам нужно запускать скрипты PHP из cron обычно лучше запускать их из интерфейса командной строки PHP, чем делать веб-запрос к скрипту. В зависимости от расположения двоичного файла PHP измените пакетное задание на:

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

Это позволяет вам:

  • Разместите свои пакетные задания вне корневого веб-сайта.
  • Запустите пакетное задание под другим эффективным UID, а не под UID вашего веб-сервера.
  • Избегайте тайм-аутов (и других ограничений), налагаемых вашим веб-сервером.
  • Обходите любое количество проблем, когда DNS-имя вашего сайта не указывает на локальный IP-адрес на вашем сервере.
  • Избегайте накладных расходов на установку TCP и / или TLS-соединения.

и больше.

Я понял, что это проблема "шпильки DNS". Лучшее решение, которое я думаю, настроить NAT, чтобы не сокращать запрос с моего внешнего IP на локальный IP ... но все же мой провайдер этого не сделал, и я временно исправил его

nano /etc/hosts

добавил строку

y.y.y.y   myserver.com

где y.y.y.y - мой МЕСТНЫЙ адрес.

Внимательно посмотрите на фактическую работающую конфигурацию iptables

ipatables -L -vn

и убедитесь, что ничто не блокирует исходный IP-адрес системы, выполняющей команды curl / ping, - примите соответствующие меры.

Если там ничего нет, то что-то в восходящем направлении, между системами может блокироваться. Поскольку пинг блокируется, я думаю, вы можете попробовать mtr

mtr -4 example.com

Это может означать, что сайт вас блокирует.

Вы уверены, что IP-адрес example.com тоже правильный?