Поддержка Проблемы и решения cURL error 6: Could not resolve host: api.wordpress.org

  • Добрый день, уважаемое сообщество.
    Прошу помощи тут, так как уже не знаю, что читать и куда смотреть.
    Все темы с таким же названием или описанием тут я уже прочитала.
    Равно как за эти две недели прочитала и перепробовала кучу разных советов по подобному вопросу на Хабр Q&A, Stack Overflow, cyberforum, coderoad, overcoder и так далее, где эти вопросы хоть раз поднимались и на них давали хоть какой-то ответ.
    Обращалась даже к регистратору своего домена, серверами имен которого я пользуюсь, на предмет ограничений с их стороны.

    Это было вступление. Теперь по сути.
    По какой-то причине я не могу проверить обновления WordPress, загрузить темы или плагины. Site Health пишет:
    Your site is unable to reach WordPress.org at api.wordpress.org, and returned the error: cURL error 6: Could not resolve host: api.wordpress.org

    Я много раз натыкалась на информацию, что для корректного использования cURL Wordpess должен видеть nameserver’a google.
    Я дописала в файл /etc/resolv.conf

    nameserver 8.8.8.8 
    nameserver 8.8.4.4 

    Не помогло.

    Я читала, что надо в файле php.ini раскомментировать строку
    ;extension=curl
    Не помогло.

    Что надо обновить cURL до последней версии.

    sudo apt install -y libcurl4 curl
    Чтение списков пакетов… Готово
    Построение дерева зависимостей       
    Чтение информации о состоянии… Готово
    Уже установлен пакет curl самой новой версии (7.58.0-2ubuntu3).
    Уже установлен пакет libcurl4 самой новой версии (7.58.0-2ubuntu3).

    Не помогло.

    php -i | grep curl
    /etc/php/7.2/cli/conf.d/20-curl.ini,
    curl

    Ошибок нет.

    curl google.com
    <HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
    <TITLE>301 Moved</TITLE></HEAD><BODY>
    <H1>301 Moved</H1>
    The document has moved
    <A HREF="http://www.google.com/">here</A>.
    </BODY></HTML>
    curl wordpress.org
    <html>
    <head><title>301 Moved Permanently</title></head>
    <body>
    <center><h1>301 Moved Permanently</h1></center>
    <hr><center>nginx</center>
    </body>
    </html>

    При этом curl api.wordpress.org не показывает никакого вывода. Ни ошибок, ни результата.

    Из этого всего могу сделать вывод, что cURL на сервере работает и работает корректно.

    И тут мне пришла в голову мысль. А что если api.wordpress.org не нравится мой IPv4 адрес и по умолчанию он пытается использовать IPv6 запросы.
    ll@localhost:~$ curl -4 api.wordpress.org
    Вывода нет, тест пройден. IPv4 работает.

    ll@localhost:~$ curl -6 api.wordpress.org
    curl: (6) Could not resolve host: api.wordpress.org

    Ошибка, тест провален. IPv6 не работает. И это та же самая ошибка, что и в админке.

    Так как мне не хочется платить за IPv6 адрес, но у меня есть белый IPv4 адрес, я бы хотела подружить его с WordPress. А в идеале, чтобы WordPress отправлял обычные запросы на свои сервера, а не привязывал их к протоколам IPv4 и IPv6.

    Подскажите пожалуйста, в каком файле движка находятся эти настройки и что там должно быть вместо текущего кода, чтобы эту проблему исправить?

    Заранее спасибо.

    Сервер на Ubuntu 18.04
    PHP 7.2
    Версия WordPress 5.6.2

    П.С.: отправлять меня менять хостинг или хостера не нужно, так как это мой домашний хостинг и мне куда интереснее находить и исправлять проблемы, а не убегать от них)
    П.П.С.: По ссылке вывод из <?php phpinfo(); ?>

    • Тема изменена 1 месяц, 3 недели назад пользователем annkot.

    Страница, с которой нужна помощь: [войдите, чтобы увидеть ссылку]

Просмотр 14 ответов — с 1 по 14 (всего 14)
  • Модератор Yui

    (@fierevere)

    ゆい

    на серверах wordpress.org (всех) нет ipv6
    только ipv4, работать это должно без проблем, если только у вас не IPv6-only сеть.

    ll@localhost:~$ curl -4 api.wordpress.org
    Вывода нет, тест пройден. IPv4 работает.

    вот, работает

    В Инструменты-Здоровье сайта что есть по поводу замечаний и подключения к WordPress.org ?

    еще гляньте с консоли

    $ curl -I https://api.wordpress.org/
    HTTP/2 302 
    server: nginx
    date: Fri, 26 Feb 2021 21:43:42 GMT
    content-type: text/html; charset=utf-8
    location: https://developer.wordpress.org/rest-api/
    x-frame-options: SAMEORIGIN

    если в /etc/hosts дописать строку

    
    198.143.164.251 api.wordpress.org
    

    и перезапустить apache/php, это поможет ?

    Я много раз натыкалась на информацию, что для корректного использования cURL Wordpess должен видеть nameserver’a google.

    это неверная информация, точнее неверная интерпретация,
    NS могут быть использованы любые, если они корректно обрабатывают записи с низким значением TTL, Yandex DNS например глючит.
    Возможно рекомендуют Google, потому что от них проблем не ожидают, в отличие от других локальных/провайдерских/общедоступных

    • Ответ изменён 1 месяц, 3 недели назад пользователем Yui.
    Модератор Yui

    (@fierevere)

    ゆい

    еще я бы рекомендовала установить nscd, это компонент glibc, который кеширует NS ответы локально.

    
    sudo apt-get install -y nscd

    Спасибо за ваш быстрый ответ.
    Сделала все, что вы написали.
    Теперь ошибка изменилась на
    Your site is unable to reach WordPress.org at 198.143.164.251, and returned the error: cURL error 7:
    Хоть что-то новое за все время попыток это исправить)

    Вывод curl -I https://api.wordpress.org точно такой же, как у вас.

    Еще посмотрела полный вывод и ошибок вроде нет.

    curl -v https://api.wordpress.org
    * Rebuilt URL to: https://api.wordpress.org/
    *   Trying 198.143.164.251...
    * TCP_NODELAY set
    * Connected to api.wordpress.org (198.143.164.251) port 443 (#0)
    * ALPN, offering h2
    * ALPN, offering http/1.1
    * successfully set certificate verify locations:
    *   CAfile: /etc/ssl/certs/ca-certificates.crt
      CApath: /etc/ssl/certs
    * (304) (OUT), TLS handshake, Client hello (1):
    * (304) (IN), TLS handshake, Server hello (2):
    * (304) (IN), TLS Unknown, Certificate Status (22):
    * (304) (IN), TLS handshake, Unknown (8):
    * (304) (IN), TLS Unknown, Certificate Status (22):
    * (304) (IN), TLS handshake, Certificate (11):
    * (304) (IN), TLS Unknown, Certificate Status (22):
    * (304) (IN), TLS handshake, CERT verify (15):
    * (304) (IN), TLS Unknown, Certificate Status (22):
    * (304) (IN), TLS handshake, Finished (20):
    * (304) (OUT), TLS change cipher, Client hello (1):
    * (304) (OUT), TLS Unknown, Certificate Status (22):
    * (304) (OUT), TLS handshake, Finished (20):
    * SSL connection using unknown / TLS_AES_256_GCM_SHA384
    * ALPN, server accepted to use h2
    * Server certificate:
    *  subject: CN=*.wordpress.org
    *  start date: Nov 22 00:00:00 2020 GMT
    *  expire date: Dec 23 23:59:59 2021 GMT
    *  subjectAltName: host "api.wordpress.org" matched cert's "*.wordpress.org"
    *  issuer: C=GB; ST=Greater Manchester; L=Salford; O=Sectigo Limited; CN=Sectigo RSA Domain Validation Secure Server CA
    *  SSL certificate verify ok.
    * Using HTTP2, server supports multi-use
    * Connection state changed (HTTP/2 confirmed)
    * Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
    * (304) (OUT), TLS Unknown, Unknown (23):
    * (304) (OUT), TLS Unknown, Unknown (23):
    * (304) (OUT), TLS Unknown, Unknown (23):
    * Using Stream ID: 1 (easy handle 0x7fb407cb80)
    * (304) (OUT), TLS Unknown, Unknown (23):
    > GET / HTTP/2
    > Host: api.wordpress.org
    > User-Agent: curl/7.58.0
    > Accept: */*
    > 
    * (304) (IN), TLS Unknown, Certificate Status (22):
    * (304) (IN), TLS handshake, Newsession Ticket (4):
    * (304) (IN), TLS Unknown, Certificate Status (22):
    * (304) (IN), TLS handshake, Newsession Ticket (4):
    * (304) (IN), TLS Unknown, Unknown (23):
    * Connection state changed (MAX_CONCURRENT_STREAMS updated)!
    * (304) (OUT), TLS Unknown, Unknown (23):
    * (304) (IN), TLS Unknown, Unknown (23):
    * (304) (IN), TLS Unknown, Unknown (23):
    < HTTP/2 302 
    < server: nginx
    < date: Fri, 26 Feb 2021 22:46:10 GMT
    < content-type: text/html; charset=utf-8
    < location: https://developer.wordpress.org/rest-api/
    < x-frame-options: SAMEORIGIN
    < 
    * Connection #0 to host api.wordpress.org left intact

    Прочитала что cURL error 7 это обычно проблема с фаерволом.
    Только у меня на сервере не стоит фаервол вообще.

    ll@localhost:~$ sudo iptables -vL
    sudo: iptables: command not found
    ll@localhost:~$ sudo ufw status
    sudo: ufw: command not found

    Или решают ее переключением настроек SELinux c enforcing на permissive.
    только у меня нечего переключать:

    ll@localhost:~$ selinux status
    -bash: selinux: command not found
    ll@localhost:~$ /usr/sbin/sestatus
    -bash: /usr/sbin/sestatus: No such file or directory
    ll@localhost:~$ /usr/sbin/getenforce
    -bash: /usr/sbin/getenforce: No such file or directory

    Среди замечаний Site Health есть еще:

    The REST API request failed due to an error.
    Error: [] cURL error 7:
    The loopback request to your site failed, this means features relying on them are not currently working as expected.
    Error encountered: (0) cURL error 7:

    Warning Could not confirm that the wp_version_check() filter is available.

    Couldn't retrieve a list of the checksums for WordPress 5.6.2. This could mean that connections are failing to WordPress.org.

    Но, как я поняла, у всех этих проблем ноги растут из одного и того же места и исправив одно, заработает и остальное.

    • Ответ изменён 1 месяц, 3 недели назад пользователем annkot.
    Модератор Yui

    (@fierevere)

    ゆい

    <?php
    $ch = curl_init("https://api.wordpress.org/");    // initialize curl handle
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    $data = curl_exec($ch);
    print($data);
    ?>

    сохраните как curltest.php в корне вашего сайта.
    Попробуйте зайти на него из браузера.
    Если работает — увидите страницу REST API manual.
    Если нет — смотрите лог ошибок PHP, возможно увидим что-то интересное…

    Если не работает, попробуйте заменить сайт в скрипте на другой адрес
    http://google.com например
    Должна быть страница гугла

    Сделала.

    https://homehost.pp.ua/curltest.php абсолютно ничего не показывает ни с https://api.wordpress.org/, ни с http://google.com, ни с https://google.com

    Включила логирование ошибок php.
    Обнаружила там только:
    [27-Feb-2021 12:10:50 Europe/Helsinki] PHP Warning: Module 'curl' already loaded in Unknown on line 0
    в файле php.ini закомментировала обратно строку
    ;extension=curl
    Эта ошибка пропала и больше ничего нет.

    Ошибок нет и в терминале.
    Вообще нигде нет ошибок, но движок ни в какую не хочет работать полностью.
    Магия какая-то)

    Зато обнаружила кучу попыток взлома WP в логах.
    Зло не дремлет)

    Модератор Yui

    (@fierevere)

    ゆい

    странно, с консоли значит у вас curl работает,
    а как расширение php — нет.

    ;extension=curl

    extension=curl.so;

    в юникс так, в вендах php_curl.dll вроде, но у вас уже curl где-то включен, в phpinfo() он есть. (в свежих версиях PHP можно просто extension=curl, PHP определяет тип файла автоматически)

    Если честно, такие косяки обычно встречаются на вендах, из-за кривой сборки, я уж не знаю на вашем Pi что за сборка стоит, попробуйте в репах посмотреть другую версию PHP, если есть.

    как вариант, можете выключить curl расширение, WordPress будет использовать в качестве резервного механизма fsockopen()
    возможно с ним что-то получится

    ps:
    еще локальные политики использования сети проверьте
    https://help.ubuntu.com/stable/ubuntu-help/net-othersconnect.html.en

    • Ответ изменён 1 месяц, 3 недели назад пользователем Yui.

    Проблема с
    cURL error 6: Could not resolve host: api.wordpress.org
    была решена с помощью:
    usermod -aG aid_inet www-data
    и
    usermod -aG aid_net_raw www-data
    Не знаю, как мне это пришло в голову, но сработало)
    В процессе переставила PHP на версию 8.0

    https://homehost.pp.ua/curltest.php теперь отображает страницу REST API Handbook

    Теперь появилась другая проблема)

    Запрос к REST API неудачен из-за ошибки.
    Ошибка: [] cURL error 28: Operation timed out after 10001 milliseconds with 0 bytes received

    И все бы хорошо, но у меня нет ни одного плагина кроме Health Check, а тема стоит та же, что идет по умолчанию с WP5.6.2 поэтому версия с конфликтом плагинов и тем точно отпадает.

    Еще волнует ошибка
    Предупреждение Невозможно подтвердить доступность фильтра wp_version_check()

    • Ответ изменён 1 месяц, 3 недели назад пользователем annkot.
    Модератор Yui

    (@fierevere)

    ゆい

    была решена с помощью:
    usermod -aG aid_inet www-data
    и
    usermod -aG aid_net_raw www-data

    т.е. все-таки локальные политики доступа к сети в вашем установленном дистрибутиве.
    Он точно для сервера предназначен ? А то грабли разложены знатно, чтобы набивать шишки.

    Запрос к REST API неудачен из-за ошибки.
    Ошибка: [] cURL error 28: Operation timed out after 10001 milliseconds with 0 bytes received

    curl (который в PHP) должен иметь возможность подключиться к вашему сайту, используя имя сайта указанное в настройках WP
    (Консоль — Настройки — Общие) адрес сайта, адрес wordpress.

    Он точно для сервера предназначен ? А то грабли разложены знатно, чтобы набивать шишки.

    Это обычная Ubuntu 18.04 LTS запущенная через LinuxDeploy на телефоне Samsung J7

    Сменила тему на Twenty Twenty и эта ошибка пропала. Видимо, проблема в теме Twenty Twenty-One была.

    Еще волнует ошибка
    Предупреждение Невозможно подтвердить доступность фильтра wp_version_check()

    Причем, она то появляется, то пропадает)

    Модератор Yui

    (@fierevere)

    ゆい

    не сказала бы что уж прямо обычная
    во-первых это HeliosPIE сборка для armv7
    во-вторых что-то там явно наворотили с настройками сети,

    по сравнению с обычной серверной убунтой LTS, в которой таких плясок с бубном нет.
    И да, это все не про WordPress

    наворотили с настройками сети

    Та да, согласна) Сижу мучаюсь теперь)

    И все же,
    cURL error 28: Operation timed out after 10001 milliseconds
    в теме Twenty Twenty-One — это и не про сервер тоже, да и в настройки самой темы с момента установки я даже не лезла, а решилась она переустановкой темы на другую.

    я пока не знаю откуда у то появления, то пропадания ошибки
    wp_version_check()
    растут ноги, но буду так же благодарна за советы)

    П.С.: Почитала еще про:
    HeliosPIE — коротко, это custom-ядро, на котором работает Android в моем телефоне)
    armv8l — это архитектура процессора Exynos7870 в телефоне и в отличие от armv7 она уже 64-битная, а не 32.
    Решила поделиться, вдруг интересно и вам будет)

    Модератор Yui

    (@fierevere)

    ゆい

    у меня «напоиграть» есть Raspberry Pi 3
    с Raspbian Buster

    кстати возможно ваше «счастье» с ограниченностью сети унаследованно как раз из ядра android, в обычной убунте такого нет, это в андроиде все разрешения раскиданы по группам.

    • Ответ изменён 1 месяц, 3 недели назад пользователем Yui.
    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Запрос к REST API неудачен из-за ошибки.
    Ошибка: [] cURL error 28: Operation timed out after 10001 milliseconds with 0 bytes received
    в теме Twenty Twenty-One — это и не про сервер тоже, да и в настройки самой темы с момента установки я даже не лезла, а решилась она переустановкой темы на другую.

    Если вернуть тему обратно, ошибка тоже возвращается?

    В Twenty Twenty-One нет никаких манипуляций с REST API — не понимаю, как она может вызвать данную ошибку 🙂

    возможно ваше «счастье» с ограниченностью сети унаследованно как раз из ядра android

    Да, я тоже об этом подумала в итоге)

    Если вернуть тему обратно, ошибка тоже возвращается?

    Если вернуть обратно, ошибки нет.
    Я скачивала ее обратно из admin-панели WP.

    Спасибо за помощь. Проблема решена.

Просмотр 14 ответов — с 1 по 14 (всего 14)