- WordPress: исправляем ошибки REST API и петлевого запроса
- Перестали работать запросы в WordPress, что делать?
- Почему мы видим ошибку certificate has expired?
- Решение ошибки: cURL error 60: SSL certificate has expired
- Вариант 1
- Вариант 2
- WordPress.org
- Русский
- REST API не работает корректно
- WordPress.org
- Русский
- Здоровье сайта (ошибка SSL)
WordPress: исправляем ошибки REST API и петлевого запроса
Привет, рукоделы 😉 Давным-давно у меня в WordPress висят две ошибки в разделе «Здоровье сайта»:
- Запрос к REST API неудачен из-за ошибки.
Ошибка: cURL error 7: Failed to connect to djnapalm.ru port 443: No route to host (http_request_failed) - Петлевой запрос к вашему сайту не удался. Возможности, зависящие от его работоспособности, не могут работать так, как должны.
Ошибка: cURL error 7: Failed to connect to djnapalm.ru port 443: No route to host (http_request_failed)
И вот всё как-то не доходили руки исправить. По началу не мог понять, почему сайт не может достучаться до самого себя. Думал в сторону nginx (у меня на VDS установлена VestaCP), много читал, искал… Пока не догадался заглянуть в файл /etc/hosts.
Вот тут-то и настало удивление. Толи этот адрес остался после очередного переноса/переезда (что подозрительно для класса сети), толи так было в установщике Весты — непонятно.
Меняю адрес на свой внешний:
И на всякий случай проверяю пингом:
Теперь вроде бы всё в порядке. Возвращаемся к нашему Wodpress`у. Меню «Инструменты — Здоровье сайта»:
И… как видим, теперь у нас, точнее у нашего WordPress всё хорошо.
Всем удачи или как говаривал ДМ: «Вы держитесь здесь, вам всего доброго, хорошего настроения и здоровья» 😉
Источник
Перестали работать запросы в WordPress, что делать?
C 30 сентября 2021 года на сайтах WordPress, для которых был установлен сертификат Let’s Encrypt, могут перестать работать HTTP API запросы.
Например такой запрос будет выдавать ошибку:
cURL error 60: SSL certificate problem: certificate has expired
Такую ошибку можно будет увидеть где угодно, например:
- в админке при проверке обновлений WordPress
- при проверке обновлений плагинов
- при обращении к апи любого сервиса. Например, перестанет работать плагин TinyPNG — JPEG, PNG & WebP image compression и куча других, которые используют какие бы то ни было запросы.
Почему мы видим ошибку certificate has expired?
Почему так происходит подробно расписано на хабре.
Если коротко, то в ядре WP есть файл корневых сертификатов /wp-includes/certificates/ca-bundle.crt который используется для проверки SSL всех запросов созданных через HTTP API. В этом файле просрочен один из корневых сертификатов на основе которого был создан сертификат для вашего сайта. Поэтому запрос не может пройти проверку и выдается такая ошибка.
С очередными обновлениями WP эта ошибка должна пропасть, но вот что делать если решение нужно уже сегодня, или если вы не планируете обновлять WordPress, а рабочие HTTP запросы нужны.
Решение ошибки: cURL error 60: SSL certificate has expired
Вариант 1
Нужно обновить контент файла /wp-includes/certificates/ca-bundle.crt изменить его на контент этого файла https://curl.haxx.se/ca/cacert.pem.
Изменять в данном случае файл ядра допустимо, потому что при следующем обновлении WP проблема исчезнет. См. соответствующий коммит на GitHub.
Это можно сделать вручную:
- Скачайте файл по ссылке https://curl.haxx.se/ca/cacert.pem.
- Обновите контент /wp-includes/certificates/ca-bundle.crt контентом из скаченного файла.
Или используйте следующий код
Использовать код удобно, когда у вас есть возможность запустить код из админки или как-то еще, например через плагин Code Snippets.
Добавьте следующий код куда угодно и перейдите на страницу http://ВАШСАЙТ.com/?update-wp-ca-bundle .
После использования, код нужно удалить.
Вариант 2
Решить проблему можно через хук http_request_args. Этот хук нужно использовать в MU плагине.
Создайте файл loader.php в папке wp-content/mu-plugins (если такой папки у вас нет, создайте её).
Добавьте следующий код в этот файл:
Создайте папку wp-content/mu-plugins/fix-wp-ca-bundle .
Создайте файлы: main.php и ca-bundle.crt в папке fix-wp-ca-bundle .
Добавьте следующий код в эти файлы.
Код файла main.php :
Контент файла ca-bundle.crt :
Должна получится такая структура:
Готово! Теперь все должно работать как и прежде.
Источник
WordPress.org
Русский
Поддержка → Проблемы и решения → REST API не работает корректно
REST API не работает корректно
Плагин «Здоровье сайта» показывает две ошибки:
1) REST API не смог корректно обработать параметр запроса context
2) Плагин предотвращает обновления отключением wp_version_check(). (подозреваю, что это из-за п.1)
Сервер nginx+php7.4 без Apache. Движок и плагины обновлены до последних версий.
В шаблоне были инструкции по блокировке REST API — убрал их. Больше ничего не нашёл.
Отключение всех плагинов и шаблона проблему не решает (режим решения проблем). Настройки пермалинков обновлял. Гугл ничего полезного не даёт.
Есть идеи, в какую строну копать?
у вас открывается что-то по адресу
вашсайт/wp-json/wp/v2/users/
?
Плагин «Здоровье сайта» показывает две ошибки:
1) REST API не смог корректно обработать параметр запроса context
в предыдущих версиях такое могло показываться и в виде ложного срабатывания.
Поэтому стоит смотреть не на это конкретное сообщение, а на работу REST API в целом, например функционирование редактора блоков.
2) Плагин предотвращает обновления отключением wp_version_check().
иногда тоже ложно срабатывает при просрочке wp_cron
Обновление плагинов и тем в консоли у вас работает?
Проверка обновлений, сами обновления?
у вас открывается что-то по адресу
вашсайт/wp-json/wp/v2/users/
Да, выдаёт информацию о пользователе.
например функционирование редактора блоков.
Насколько я вижу — работает нормально.
Обновление плагинов и тем в консоли у вас работает?
Да. Специально изменил у одного плагина цифру в версии — сразу же выпало предупреждение о необходимости обновиться и обновление прошло успешно.
иногда тоже ложно срабатывает при просрочке wp_cron
Принудительно запустил все запланированные задачи — не помогло, ничего не изменилось.
Вообще, эта ошибка (про обновление) появилась именно после удаления кода, отключающего REST API. По самому REST API была ошибка 404 (что логично), но после удаления кода показывает проблему с контекстом.
В итоге, как я понял, всё работает хорошо, но всё же, что-то мешает проверке пройти нормально. Чисто из исследовательского интереса хотелось бы выяснить причину. И может ли это как быть связано с настройками сервера? Сервер у меня свой, могу поковырять настройки, если укажете, куда смотреть.
эта ошибка (про обновление) появилась именно после удаления кода, отключающего REST API
настройки ЧПУ вы обновляли…
проверка тоже далека от абсолютного совершенства
можете с плагином попробовать, https://ru.wordpress.org/plugins/health-check/
там чуть более свежий код этого компонента (+доп инструменты)
Да и в целом, если все работает и не создает реальных проблем, то наверное можно и отложить поиск проблем на ровном месте на неопределенное время (до обновления WP до следующего значимого выпуска (к концу марта) или плагина health-check)
Собственно, весь разговор именно о нём. Это он мне такие ошибки показывает.
если все работает и не создает реальных проблем, то наверное можно и отложить поиск проблем
Хорошо, согласен. Просто не люблю, когда остаётся что-то непонятное, да ещё и в виде ошибки.
Собственно, весь разговор именно о нём. Это он мне такие ошибки показывает.
есть плагин, есть штатный компонент WordPress 5.2+
в плагине есть инструменты, в штатном компоненте их нет.
Сравните кстати, с деактивированным плагином, будут ли те же замечания или они пропадут ?
есть плагин, есть штатный компонент WordPress 5.2+
Даже не подозревал о таком. Всегда плагин ставил.
Сравните кстати, с деактивированным плагином, будут ли те же замечания или они пропадут ?
Источник
WordPress.org
Русский
Здоровье сайта (ошибка SSL)
Тестирую здоровье сайта и получаю сообщение о 2 критических проблемах:
1) REST API выдал ошибку (Производительность)
REST API — один из способов коммуникации WordPress и других приложений с сервером. К примеру, экран редактора блоков использует его для отображения и сохранения ваших записей и страниц.
Запрос к REST API неудачен из-за ошибки.
Ошибка: [] cURL error 60: SSL certificate problem: self signed certificate in certificate chain
2) Ваш сайт не смог выполнить петлевой запрос.
Петлевые запросы используются для запуска запланированных заданий, а также используются встроенным редактором кода плагинов и тем для проверки корректности кода.
Петлевой запрос к вашему сайту не удался, возможности, зависящие от его работоспособности сейчас не работают как нужно.
Ошибка: [] cURL error 60: SSL certificate problem: self signed certificate in certificate chain
Судя по всему ошибка в SSL сертификатом.
Сертификат SSL получен от Cloudflare (free).
Подключение: установлен плагин кеширования Total Cache и через его расширение Performance/Extension введены данные для взаимодействия с Cloudflare. Сертификат установлен верно.
Тестирование через
https://www.immuniweb.com/ssl/?id=TFYBoYit
https://www.ssllabs.com/ssltest/analyze.html?d=saleandbuy.ru&latest
Дали результат: А+
Кто виноват и что делать? Спасибо.
Страница, с которой нужна помощь: [войдите, чтобы увидеть ссылку]
Есть предположение, что реальный сервер ничего не знает о cloudflare, а потому получив от своего DNS реальный IP сервера (то есть свой собственный), обращается сразу по нему и там получает самоподписанный сертификат вместо настоящего клаудфларевского.
Скорее всего так и есть.
Вопрос только в том считать ли ошибкой данное сообщение о здоровье сайта или реально умный WP сообщает, что он чего-то не может сделать, отваливается с ошибкой по причине самоподписанного сертификата и это влияет на производительность сайта.
Добавил в php.ini
curl.cainfo =/var/www/some-user/data/php-bin/cacert.pem
скачал соответствующий файл в директорию cacert.pem
Перегрузил.
Результата нет. Критические ошибки остались.
Тут выплыла еще более мощная проблема: плагин Contact Form 7 перестал отправлять сообщения. Например, тут: https://saleandbuy.ru/privet/ Крутится колесико и больше нет никаких движений. Я даже не заметил когда случилась эта неприятность, поскольку сайт был в стадии разработки и постоянно что-то ставилось, менялось. Предполагаю, что после установки ssl сертификата от Cloudflare и из-за ошибок с REST API.
Примечание: на том же ВПС размещен сайт, который использует Contact Form 7 на той же теме Sahifa, то без https и отправка нормальная. Поговорил с хостером, утверждает, что каких-то ограничений на отправку сообщений с сайта с его стороны нет.
Порекомендуйте, что делать. Спасибо.
- Ответ изменён 2 года, 1 месяц назад пользователем akigleo .
REST API отключён каким-то плагином?
REST API сознательно не отключал.
Проверил functions.php на наличие кода отключающего REST API. Плагины типа Disable REST API или похожие не ставил.
Активные плагины
Akismet Anti-Spam Версия 4.1.2 автора Automattic
All In One SEO Pack Версия 3.2.6 автора Michael Torbert
amr shortcode any widget Версия 3.7 автора anmari
Contact Form 7 Версия 5.1.4 автора Takayuki Miyoshi
Contact Form 7 — Dynamic Text Extension Версия 2.0.3 автора Chris Mavricos, SevenSpark
Cyr-To-Lat Версия 4.2.3 автора Sergey Biryukov, Mikhail Kobzarev, Igor Gergel
Decent Comments Версия 1.8.0 автора itthinx
Display Posts Версия 3.0.2 автора Bill Erickson
Indeed Ultimate Membership Pro Версия 8.2 автора indeed
InterKassa Gateway Версия 1.5 автора Interkassa
PHP Everywhere Версия 2.0.0 автора Alexander Fuchs
Posts Table Pro Версия 2.1.1 автора Barn2 Media
Shortcodes Ultimate Версия 5.4.1 автора Vladimir Anokhin
Shortcodes Ultimate: Additional Skins Версия 1.5.6 автора Vladimir Anokhin
Shortcodes Ultimate: Extra Shortcodes Версия 1.5.12 автора Vladimir Anokhin
Simple Custom CSS Версия 4.0.2 автора John Regan, Danny Van Kooten
TinyMCE Advanced Версия 5.2.1 автора Andrew Ozz
Ultimate FAQ Версия 1.8.24 автора Etoile Web Design
W3 Total Cache Версия 0.10.0 автора Frederick Townes
WC Custom Thank You Версия 1.2.1 автора Nicola Mustone
WooCommerce Версия 3.7.0 автора Automattic
Wordfence Security Версия 7.4.0 автора Wordfence
WP-dTree Версия 4.4.5 автора Ulf Benjaminsson
WP Author Box Pro Версия 2.0.7 автора phpbits
wpDiscuz Версия 5.3.2 автора gVectors Team (A. Chakhoyan, G. Zakaryan, H. Martirosyan)
WP User Frontend Версия 3.1.9 автора Tareq Hasan
WP User Frontend Pro — professional Версия 3.1.8 автора weDevs
Неактивные плагины:
Ajax Search Pro Версия 4.16.1 автора Ernest Marcinko
Duplicate Post Версия 3.2.3 автора Enrico Battocchi
Post Type Switcher Версия 3.2.0 автора John James Jacoby
Query Monitor Версия 3.3.7 автора John Blackbourn
Reveal IDs Версия 1.5.3 автора Oliver Schlöbe
WordPress Importer Версия 0.6.4 автора wordpressdotorg
Wordfence Security Версия 7.4.0 автора Wordfence
В Wordfence Security стояла галка: х для опции:
Prevent discovery of usernames through ‘/?author=N’ scans, the oEmbed API, and the WordPress REST API
Отключение, сброс кеша, ничего не дало.
Временно отключил сам плагин Wordfence Security. После сброса кеша, перепроверил повторно — сообщение
https://saleandbuy.ru/wp-json/contact-form-7/v1/contact-forms/21142/feedback
не изменилось.
Аналогично и ошибки здоровья сайта.
Не самый удачный сертификат. Кое-кто сайт вообще не увидит(старый Хром например)- На сайте saleandbuy.ru используется неподдерживаемый протокол
Впрочем, к основной проблеме это не относится.
нормальный сертификат. C видимостью сайта тоже все хорошо, «Старый Хром» это 49 версии на WinXP ? Давно пора закопать.
Cloudflare критикуют и отзывы не очень
Вполне можно обойтись без него. Сейчас практически любой хостинг предоставляет бесплатный SSL сертификат.
Сертификат можно и отдельный взять не отказываясь от функционала Cloudflare. Что касается отзывов, то они разные и всех свои задачи.
Если вернуться к основной проблеме, то в какую сторону копать?
Верно ли я понимаю, что проблема с отправкой через Contact Form 7 обусловлена отключенным REST API?
Я погуглил на доступном мне уровне и вижу, что как таковой кнопки «включить REST API» нет, поскольку все в WP по умолчанию включено. Нужно вероятно только искать где стоит установка по его отключению в каком-то конфиге.
вы на даты в статье принципиально не смотрите, или это просто что бы что-то ляпнуть?
Вполне можно обойтись без него. Сейчас практически любой хостинг предоставляет бесплатный SSL сертификат.
так-то и без обуви обойтись можно — любая береза предоставляет бесплатные лапти.
CF7 сейчас без REST API больше не работает.
Отключить вы могли его или плагинами, из кандидатов — WordFence
или в .htaccess (запрет на /wp-json URL)
Также могли отключить в functions.php темы.
.htaccess просмотрел, запретов не увидел. Для верности скопировал его временно с сайта, где ошибка для REST API не выдается, а набор плагинов близкий. Все равно выдается ошибка.
Переименовал в дочерней теме function.php, чтобы подтягивался только оригинальный function основной темы. Все равно выдается ошибка.
Вырубил все плагины кроме w3 Total Cash и Contact Form 7. Ошибка на месте.
Хм… иссяк.
Вырубил все плагины кроме w3 Total Cash
В ядре WordPress нет строки «REST API disabled», зато она обнаружилась в W3 Total Cache, вместе с функцией отключения. Стоит проверить его настройки.
Источник