Это необходимо, потому что мне нужно реализовать балансировщик нагрузки в GCP для экземпляра Word Press.
GCP пересылает запрос экземпляру wordpress только в том случае, если он проходит проверку работоспособности.
Вот типичное определение экрана проверки работоспособности
Он ожидает, что «путь запроса» вернет 200. В противном случае целевая система считается неработающей.
Однако, если я создам страницу в wordpress, например. /index.php/newpage
, он всегда будет возвращать 301.
Пока сайт WordPress запущен и работает, он не проходит проверку работоспособности.
Есть ли способ определить страницу в wordpress, которая вернет 200? Надеюсь, для этого не потребуется дополнительный плагин, потому что я бы не хотел поддерживать лишний плагин.
Последнее средство для меня - добавить URL-адрес к серверу php, который вернет 200. Однако статус этого URL-адреса может не на 100% отражать работоспособность сайта wordpress (который может снизиться, например, из-за проблемы с mysql). Если это действительно последнее средство, как лучше всего его реализовать? Я не разбираюсь в разработке php.
Версия wordpress - 4.6.2.
Вы можете использовать главную страницу установки WordPress для проверки работоспособности. Это самый надежный показатель доступности сайта WordPress.
Что бы это ни стоило, мне пришлось настроить сайт WordPress в контейнере и пройти проверку работоспособности, прежде чем я смог даже получить трафик, направленный на него. Предложения для "первой страницы" работают только ПОСЛЕ установки WordPress через браузер. До этого они возвращают код статуса 302 на /wp-admin/install.php
. Я покопался в папках контейнера и решил использовать /wp-includes/images/blank.gif
как путь проверки работоспособности. Это позволило успешно выполнить проверку работоспособности и начать маршрутизацию трафика в контейнер. Оттуда я установил WordPress через браузер и смог снова изменить путь проверки работоспособности на /
.
Хотя это старый пост, я хотел вмешаться в него, потому что эта тема все еще актуальна, а принятый ответ не идеален для моего варианта использования. Я бы не стал предлагать другим это делать; особенно для системы с высокой проходимостью.
Моя проблема с принятым ответом заключается в том, что предлагается использовать домашнюю страницу в качестве проверки работоспособности. В зависимости от вашего сайта это может быть нормально, но я не вижу необходимости запрашивать БД при проверке работоспособности. Даже если соединение с БД не удается, экземпляр все еще технически исправен. например Если ваш кластер RDS выйдет из строя, на домашней странице отобразится ошибка БД, которая даст 500
так что вы бы запускали автоматическое масштабирование без необходимости. Проверка работоспособности должна только проверить приложение и убедиться, что оно правильно настроено.
На моей домашней странице много запросов, и одна только проверка работоспособности фактически создаст ненужную нагрузку на кластер RDS с моей настройкой нескольких экземпляров. Я мог бы указать более легкую страницу, но это все еще не идеально, поскольку проверка работоспособности должна гарантировать, что экземпляр настроен правильно, и я не хочу, чтобы проверка конкретного проекта добавлялась в каждую систему, которую я запускаю. Хотя и для этого есть варианты использования.
Я использую эту простую проверку здоровья (_healthCheck.php
):
<?php
/**
* Check if basic WordPress structure is in place
* This is to be used for load balancer health checks
*/
// Checks
define('WORDPRESS_CONFIG', __DIR__ . DIRECTORY_SEPARATOR . 'wp-config.php');
define('WORDPRESS_DIRECTORY', __DIR__ . DIRECTORY_SEPARATOR . 'wordpress');
define('WP_CONTENT_DIRECTORY', __DIR__ . DIRECTORY_SEPARATOR . 'wp-content');
// Health Check Flags
$_healthCheckStatus = true;
// Will stop the while loop
$_healthCheckCompleted = false;
// Just to be safe
try {
// DoWhile loop here to simplify kicking out on a false $_healthCheckStatus
do {
// Check if wp-config exists
if (!file_exists(WORDPRESS_CONFIG)) {
$_healthCheckStatus = false;
}
// Make sure we have required directories
$_healthCheckStatus = _dirIsValidAndNotEmpty(WORDPRESS_DIRECTORY);
$_healthCheckStatus = _dirIsValidAndNotEmpty(WP_CONTENT_DIRECTORY);
// Checks are complete, kick out the loop
$_healthCheckCompleted = true; // Just say no to infinity and beyond
} while (false === $_healthCheckCompleted && true === $_healthCheckStatus);
} catch (\Exception $e) {
// Health check fails
$_healthCheckStatus = false;
}
// If a bad healthcheck, return 404 to tell the load balancer we suck
if (false === $_healthCheckStatus) {
header("HTTP/1.0 404 Not Found");
?>
<html>
<body><h1>Health is bad</h1></body>
</html>
<?php
die();
} else {
?>
<html>
<body><h1>Health appears good</h1></body>
</html>
<?php
}
/**
* Validates a directory and ensures it's not empty
* @param string $dir
* @return bool
*/
function _dirIsValidAndNotEmpty($dir) {
// Make sure we have a directory
if (is_dir($dir)) {
// Make sure it's not empty
$_dirIsNotEmpty = (new \FilesystemIterator($dir))->valid();
if ($_dirIsNotEmpty) {
return true;
}
}
return false;
}
Несколько замечаний:
wordpress
каталог. wordpress
каталог.wp-content
для упрощения управления проектами.Эта проверка работоспособности проверяет только систему, чтобы убедиться, что она правильно настроена. Нет необходимости запрашивать БД, так как это не требуется для проверки работоспособности. Это проблема конфигурации, которую следует решить, прежде чем вы начнете настраивать свою систему.
Отредактировано:
Я использовал /wp-admin/images/wordpress-logo.svg (в предыдущих версиях он работал с /favicon.ico) Звучит больше как взлом, но если wordpress не работает, вы получаете ошибку 5xx, иначе 200 = уже установлено, 200 = не установлено.