Вопрос или проблема
Привет, я пытаюсь разобраться с этим уже довольно долго, но что бы я ни делал, ничего не работает.
У меня есть 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-заголовков. Также проверьте, активированы ли другие настройки и конфигурации, которые могут блокировать необходимую функциональность.
Важно помнить, что проблемы с отображением панели администратора могут также быть вызваны ошибками в коде плагинов или тем, поэтому всегда полезно проводить тесты с минимальным набором компонентов.
Если у вас есть дополнительные вопросы или нуждаетесь в дальнейшей помощи, не стесняйтесь обращаться за поддержкой.