¿Cómo crear una URL en WordPress que devolverá el código 200?

¿Cómo crear una URL en WordPress que devolverá el código 200?

Esto es necesario porque necesito implementar un balanceador de carga en GCP para una instancia de Word Press.

GCP solo enviará una solicitud a la instancia de WordPress si pasa la prueba de estado.

A continuación se muestra una definición típica de una pantalla de control de salud.

ingrese la descripción de la imagen aquí

Espera que la 'ruta de solicitud' devuelva 200. De lo contrario, el sistema de destino se considera inactivo.

Sin embargo, si creo una página en WordPress, por ejemplo /index.php/newpage, siempre devolverá 301.

Mientras el sitio de WordPress está en funcionamiento, no pasa la verificación de estado.

¿Hay alguna manera de definir una página en WordPress que devuelva 200? Con suerte, no requerirá un complemento adicional porque me gustaría evitar mantener un complemento adicional.

El último recurso para mí es agregar una URL al servidor PHP que devolverá 200. Sin embargo, es posible que el estado de esta URL no refleje al 100% la salud del sitio de WordPress (que puede fallar debido a un problema de MySQL, por ejemplo). Si efectivamente es el último recurso, ¿cuál es la mejor manera de implementarlo? No soy competente con el desarrollo de PHP.

La versión de wordpress es 4.6.2

Respuesta1

Puede utilizar la página principal de instalación de WordPress para el control de estado. Este es el indicador más confiable de que el sitio de WordPress está disponible.

Respuesta2

Por si sirve de algo, tuve que configurar un sitio de WordPress en un contenedor y realizar una verificación de estado para tener éxito antes de poder dirigir el tráfico a él. Las sugerencias para la "página principal" funcionan sólo DESPUÉS de que WordPress se haya instalado a través del navegador. Antes de eso, devuelven un código de estado 302 a /wp-admin/install.php. Busqué en las carpetas del contenedor y decidí usarlas /wp-includes/images/blank.gifcomo ruta de verificación de estado. Esto permitió que la verificación de estado fuera exitosa y el tráfico comenzó a dirigirse al contenedor. Desde allí instalé WordPress a través del navegador y pude volver a cambiar la ruta de verificación de estado a /.

Respuesta3

Si bien esta es una publicación antigua, quería intervenir en esto porque este tema sigue siendo relevante y la respuesta aceptada no es ideal en mi caso de uso. No sugeriría que otros hagan esto; especialmente para un sistema de alto tráfico.

Mi problema con la respuesta aceptada es que se sugiere utilizar la página de inicio como control de estado. Dependiendo de su sitio, esto podría estar bien, pero no veo la necesidad de consultar la base de datos en una verificación de estado. Incluso si la conexión a la base de datos falla, la instancia sigue siendo técnicamente saludable. Por ejemplo, si su clúster RDS deja de funcionar, la página de inicio mostrará un error de base de datos que le dará un mensaje de error, 500por lo que activará su escalado automático sin necesidad. La verificación de estado solo necesita verificar la aplicación y asegurarse de que esté configurada correctamente.

Mi página de inicio tiene muchas consultas y la verificación de estado por sí sola generará una carga innecesaria en el clúster RDS con mi configuración de instancias múltiples. Podría especificar una página más clara, pero esto aún no es ideal ya que la verificación de estado debe garantizar que la instancia esté configurada correctamente y no quiero que se agregue una verificación específica del proyecto a cada sistema que active. Aunque también existen casos de uso para eso.

Utilizo este sencillo control de salud ( _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;
}

Algunas cosas a tener en cuenta:

  • Siempre instalo WordPress en el wordpressdirectorio.
    • Esto hace que sea mucho más fácil mantener un proyecto en Git, ya que simplemente puedes ignorar el wordpressdirectorio.
  • Como tengo WordPress en su propio directorio, me gusta usar el mío propio wp-contentpara simplificar la gestión de proyectos.
  • Puede modificar esto fácilmente según sus necesidades.

Esta verificación de estado solo verifica el sistema para garantizar que esté configurado correctamente. No es necesario consultar la base de datos, ya que no es necesario para la verificación de estado. Ese es un problema de configuración que debe solucionarse antes de configurar su sistema en primer lugar.

Respuesta4

Editado:

He usado /wp-admin/images/wordpress-logo.svg (en versiones anteriores funcionó con /favicon.ico) Suena más como un truco, pero si WordPress no funciona, aparece el error 5xx; de lo contrario, 200 = ya instalado, 200 =no instalado.

información relacionada