如何在 wordpress 中创建一个返回代码 200 的 url?

如何在 wordpress 中创建一个返回代码 200 的 url?

这是必要的,因为我需要在 GCP 中为 Word Press 实例实现负载均衡器。

只有通过健康测试,GCP 才会将请求转发给 wordpress 实例。

以下是健康检查屏幕的典型定义

在此处输入图片描述

它期望“请求路径”返回 200。否则目标系统将被视为关闭。

但是如果我在 wordpress 中创建一个页面/index.php/newpage,它将始终返回 301。

虽然 wordpress 网站已启动并运行,但它未能通过健康检查。

有什么方法可以定义 wordpress 中返回 200 的页面吗?希望它不需要额外的插件,因为我想避免维护额外的插件。

对我来说,最后的手段是向 php 服务器添加一个返回 200 的 URL。但是,此 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=未安装。

相关内容