Задать вопрос
@Alexxx23

В чем суть ошибки в canonical.php и как ее исправить?

sudo tail -f /var/log/nginx/error.log
2025/01/20 05:44:35 [notice] 910#910: worker process 913 exited with code 0
2025/01/20 05:44:35 [notice] 910#910: signal 29 (SIGIO) received
2025/01/20 05:44:35 [notice] 910#910: signal 17 (SIGCHLD) received from 915
2025/01/20 05:44:35 [notice] 910#910: worker process 915 exited with code 0
2025/01/20 05:44:35 [notice] 910#910: worker process 912 exited with code 0
2025/01/20 05:44:35 [notice] 910#910: signal 29 (SIGIO) received
2025/01/20 05:44:35 [notice] 910#910: signal 17 (SIGCHLD) received from 912
[error] 2156#2156: *18 FastCGI sent in stderr: "PHP message: PHP Warning:  Undefined array key "host" in /usr/share/nginx/html/wp-includes/canonical.php on line 717; PHP message: PHP Warning:  Undefined array key "host" in /usr/share/nginx/html/wp-includes/canonical.php on line 728; PHP message: PHP Warning:  Undefined array key "host" in /usr/share/nginx/html/wp-includes/canonical.php on line 731; PHP message: PHP Warning:  Undefined array key "scheme" in /usr/share/nginx/html/wp-includes/canonical.php on line 752; PHP message: PHP Warning:  Undefined array key "host" in /usr/share/nginx/html/wp-includes/canonical.php on line 717; PHP message: PHP Warning:  Undefined array key "host" in /usr/share/nginx/html/wp-includes/canonical.php on line 728; PHP message: PHP Warning:  Undefined array key "host" in /usr/share/nginx/html/wp-includes/canonical.php on line 731; PHP message: PHP Warning:  Undefined array key "scheme" in /usr/share/nginx/html/wp-includes/canonical.php on line 752" while reading response header from upstream, client: 64.226.77.131, server: www.domen.ru, request: "GET / HTTP/1.0", upstream: "fastcgi://unix:/run/php/php8.3-fpm.sock:"

На данный момент сервер только настраивается:
Ubuntu 24
Nginx 1.26
Php 8.3

Nginx настроен на сайт с Wordpress 6.7.1 cо стандартной темой Twenty Twenty-Five. При смене темы проблема остается. На самом сайте установлены плагины безопасности. IP 64.226.77.131 не является моим.
  • Вопрос задан
  • 238 просмотров
Подписаться 2 Средний 1 комментарий
Пригласить эксперта
Ответы на вопрос 1
@MarkLarin
Ошибка Undefined array key в файле canonical.php WordPress обычно возникает, если PHP пытается получить значение из массива с ключом, которого там нет. Это может быть связано с тем, что запрос клиента либо неполный, либо неправильно обработан.

Разберем ситуацию:

Ошибка с ключами "host" и "scheme":

Это происходит, когда WordPress пытается обработать URL, но массив, содержащий данные URL (обычно результат parse_url()), не имеет ожидаемых ключей host или scheme.
В данном случае может быть проблема с самим запросом (например, он пришел без корректного заголовка Host) или с внутренней обработкой запроса в WordPress.
Проблема с IP 64.226.77.131:

Это может быть бот или другой внешний клиент, который делает некорректный запрос на сервер.
Возможно, запрос не включает поле Host, что вызывает ошибки в WordPress.
Решение проблемы
Обновите WordPress:

Убедитесь, что у вас установлена самая последняя версия WordPress и всех плагинов. На момент написания версия 6.7.1 — это текущая версия.
Проверка кода canonical.php:

Ошибки на строках 717, 728, 731, 752 показывают, что скрипт ожидает существование ключей host и scheme.
Чтобы предотвратить подобные ошибки, можно добавить проверку перед использованием этих ключей:
php
Копировать
Редактировать
if (isset($url_parts['host']) && isset($url_parts['scheme'])) {
// Ваш код
}
Однако модификация ядра WordPress не рекомендуется, так как это может привести к проблемам с обновлениями.
Обновите PHP:

PHP 8.3 — относительно новая версия. Убедитесь, что все плагины и тема совместимы с ней. Если есть подозрения, попробуйте использовать более стабильную версию, например, PHP 8.1.
Проверьте конфигурацию Nginx:

Убедитесь, что Nginx правильно передает заголовок Host в запросах FastCGI:
nginx
Копировать
Редактировать
fastcgi_param HTTP_HOST $host;
fastcgi_param HTTPS $https if_not_empty;
Перезагрузите Nginx после изменений:
bash
Копировать
Редактировать
sudo systemctl reload nginx
Защитите сервер от подозрительных запросов:

Добавьте фильтр, чтобы отклонять запросы без заголовка Host. Например:
nginx
Копировать
Редактировать
if ($host = "") {
return 444;
}
Используйте плагины безопасности, чтобы ограничить доступ ботам или подозрительным IP.
Логирование запросов:

Включите логирование всех входящих запросов, чтобы понять, какие именно запросы вызывают ошибку:
nginx
Копировать
Редактировать
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
Проанализируйте записи, чтобы выявить проблемный трафик.
Обратитесь к разработчику плагинов:

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

Войдите, чтобы написать ответ

Похожие вопросы