Как создать URL в WordPress, который будет возвращать код 200?

Как создать URL в WordPress, который будет возвращать код 200?

Это необходимо, поскольку мне необходимо реализовать балансировщик нагрузки в GCP для экземпляра WordPress.

GCP перенаправит запрос экземпляру WordPress только в том случае, если он пройдет проверку работоспособности.

Вот типичное определение экрана проверки работоспособности.

введите описание изображения здесь

Ожидается, что «путь запроса» вернет 200. В противном случае целевая система считается вышедшей из строя.

Однако если я создам страницу в WordPress, например /index.php/newpage, она всегда будет возвращать 301.

Несмотря на то, что сайт WordPress работает, он не проходит проверку работоспособности.

Есть ли способ определить страницу в WordPress, которая будет возвращать 200? Надеюсь, для этого не потребуется дополнительный плагин, потому что я хотел бы избежать поддержки дополнительного плагина.

Последнее средство для меня — добавить URL на сервер php, который вернет 200. Однако статус этого URL может не на 100% отражать состояние сайта WordPress (который может выйти из строя из-за проблем с MySQL, например). Если это действительно последнее средство, как лучше всего его реализовать? Я не разбираюсь в разработке PHP.

Версия WordPress — 4.6.2.

решение1

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

решение2

Если это того стоит, мне пришлось настроить сайт WordPress в контейнере и добиться успешной проверки работоспособности, прежде чем я смог направить на него трафик. Предложения для «главной страницы» работают только ПОСЛЕ установки WordPress через браузер. До этого они возвращают код статуса 302 на /wp-admin/install.php. Я покопался в папках контейнера и решил использовать /wp-includes/images/blank.gifв качестве пути проверки работоспособности. Это позволило успешной проверке работоспособности, и трафик начал направляться в контейнер. Оттуда я установил WordPress через браузер и смог изменить путь проверки работоспособности обратно на /.

решение3

Хотя это старый пост, я хотел бы вмешаться, потому что эта тема все еще актуальна, а принятый ответ не идеален в моем случае использования. Я бы не советовал другим делать это, особенно для системы с высоким трафиком.

Моя проблема с принятым ответом заключается в том, что предлагается использовать домашнюю страницу в качестве проверки работоспособности. В зависимости от вашего сайта, это может быть нормально, но я не вижу необходимости в запросе к БД при проверке работоспособности. Даже если соединение с БД не удается, экземпляр все равно технически работоспособен. Например, если ваш кластер 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каталог.
    • Это значительно упрощает поддержку проекта в Git, поскольку вы можете просто игнорировать этот wordpressкаталог.
  • Поскольку WordPress у меня находится в отдельном каталоге, мне нравится использовать его wp-contentдля упрощения управления проектами.
  • Вы можете легко изменить его в соответствии со своими потребностями.

Эта проверка работоспособности проверяет только систему, чтобы убедиться, что она настроена правильно. Нет необходимости запрашивать базу данных, так как это не требуется для проверки работоспособности. Это проблема конфигурации, которую следует решить до того, как вы настроите свою систему в первую очередь.

решение4

Отредактировано:

Я использовал /wp-admin/images/wordpress-logo.svg (в предыдущих версиях это работало с /favicon.ico). Это больше похоже на хак, но если WordPress не работает, вы получите ошибку 5xx, в противном случае 200=уже установлено, 200=не установлено.

Связанный контент