WordPress на Nginx – отсутствует админская панель/инструментальная строка

Вопрос или проблема

Привет, я пытаюсь разобраться с этим уже довольно долго, но что бы я ни делал, ничего не работает.

У меня есть VPS, настроенный с Nginx + Varnish и мультисайтом WordPress.

Всё работает нормально, кроме панели администратора/инструментов при просмотре сайтов. Она просто не загружается. Она загружается в административной области, но при просмотре сайта не загружается.

Я проверил “Показывать панель инструментов при просмотре сайта”, и я деактивировал все плагины.

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

Я проверил исходный код, и странное в том, что “#wpadminbar” там нет! Но поскольку это стандартная тема, каждый код выглядит нормально – wp_head и wp_footer правильно размещены.

Теперь я предполагаю, что это скорее проблема сервера, и, возможно, проблема Nginx или Varnish?

Я надеюсь, что кто-то сможет помочь мне с этим разобраться…

-Хауи

Если вы используете Varnish и не видите панель администратора, это, вероятно, потому что у вас есть правило в /etc/varnish/default.vcl, которое выглядит так:

sub vcl_recv {
    if (!(req.url ~ "wp-(login|admin)")) {
        unset req.http.cookie;
    }
}

Это будет мешать отображению панели администратора, потому что вы сбрасываете куки с всех страниц, кроме тех, которые совпадают с wp-(login|admin). Проверьте, убрав это правило и загрузив ваш сайт. Если панель администратора появляется, вам нужно будет настроить правила Varnish.

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

У меня была та же проблема, поэтому я обновил свой /etc/varnish/default.vcl до этого – трудно сказать, возможно, сейчас я позволяю слишком много куки (? Я, вероятно, буду использовать это только на тестовом сайте, а не на рабочем), но это вернуло мою панель инструментов!

# Удаляем любые ненужные куки, отправляемые в WordPress.
sub vcl_recv {
   // страницы, которые требуют куки
   if ((req.url ~ "^/sqlstuff") || (req.url ~ "wp-(login|admin)")) {
       return (pass);
   }

   // удаляем любые куки, которые не хотим сохранять
   if (req.http.cookie && !(req.http.cookie ~ "(wordpress_|wp-settings-)")) {
       unset req.http.cookie;
   }
}

# Удаляем любые ненужные куки, которые WordPress пытается отправить обратно клиенту.
sub vcl_fetch {
   // страницы, которые требуют куки
   if ((req.url ~ "^/sqlstuff") || (req.url ~ "wp-(login|admin)")) {
       return (hit_for_pass);
   }

   // удаляем любые куки, которые не хотим сохранять
   if (req.http.cookie && !(req.http.cookie ~ "(wordpress_|wp-settings-)")) {
       unset beresp.http.set-cookie;
   }
}

Ответ или решение

Проблема с отсутствием панели администратора в WordPress на Nginx и Varnish

Описание проблемы

Пользователи WordPress, работающие на серверах с конфигурацией Nginx и Varnish, иногда сталкиваются с проблемой отсутствия панели администратора (административной панели) при посещении своих сайтов. Эта проблема может проявляться как в многосайтовом (multisite) режиме, так и в обычной установке WordPress. Ваша ситуация описывает именно такой случай, когда панель отображается в административной части, но не появляется на главной странице сайта, несмотря на все предпринятые меры, включая отключение плагинов и проверку настройки "Показать панель при просмотре сайта".

Возможные причины и решения

Проблема, которую вы описываете, может быть связана с конфигурацией Varnish. Varnish — это кэширующий HTTP-ускоритель, который может блокировать необходимые куки для отображения панели администратора.

Проверка конфигурации Varnish

Вам следует проверить файл конфигурации Varnish (/etc/varnish/default.vcl). Ваша конфигурация может иметь следующие строки:

sub vcl_recv {
    if (!(req.url ~ "wp-(login|admin)")) {
        unset req.http.cookie;
    }
}

Этот код удаляет куки, которые необходимы для отображения панели администратора на страницах, не относящихся к админке. Если вы уберете эту часть или отредактируете её так, чтобы сохранять куки для пользователей, у которых активирована панель администратора, проблема может быть решена. Попробуйте временно отключить эту строку и проверьте, появится ли панель.

Редактирование конфигурации для улучшения работы

Для того чтобы не блокировать нужные куки, вы можете изменить vcl_recv и vcl_fetch, как показано ниже:

sub vcl_recv {
   // Страницы, которые требуют куков
   if ((req.url ~ "^/sqlstuff") || (req.url ~ "wp-(login|admin)")) {
       return (pass);
   }

   // Удаляем ненужные куки
   if (req.http.cookie && !(req.http.cookie ~ "(wordpress_|wp-settings-)")) {
       unset req.http.cookie;
   }
}

sub vcl_fetch {
   // Страницы, которые требуют куков
   if ((req.url ~ "^/sqlstuff") || (req.url ~ "wp-(login|admin)")) {
       return (hit_for_pass);
   }

   // Удаляем ненужные куки, которые отправляет WordPress
   if (beresp.http.set-cookie && !(beresp.http.set-cookie ~ "(wordpress_|wp-settings-)")) {
       unset beresp.http.set-cookie;
   }
}

Эти изменения позволят избежать удаления куков, необходимых для работы администраторской панели, и одновременно сохранят производительность системы за счет исключения ненужных куков.

Заключение

Если вы всё ещё сталкиваетесь с проблемами после внесения этих изменений, вам стоит перепроверить интеграции с другими компонентами, такими как CDN или дополнительные кэш-системы, которые могут влиять на куки и обработку HTTP-заголовков. Также проверьте, активированы ли другие настройки и конфигурации, которые могут блокировать необходимую функциональность.

Важно помнить, что проблемы с отображением панели администратора могут также быть вызваны ошибками в коде плагинов или тем, поэтому всегда полезно проводить тесты с минимальным набором компонентов.

Если у вас есть дополнительные вопросы или нуждаетесь в дальнейшей помощи, не стесняйтесь обращаться за поддержкой.

Оцените материал
Добавить комментарий

Капча загружается...