如何在 WordPress 中建立一個回傳代碼 200 的 url?

如何在 WordPress 中建立一個回傳代碼 200 的 url?

這是必需的,因為我需要在 GCP 中為 word press 實例實作負載平衡器。

只有當通過執行狀況測試時,GCP 才會將請求轉送到 WordPress 實例。

這是健康檢查螢幕的典型定義

在此輸入影像描述

它期望「請求路徑」會返回 200 否則,目標系統將被視為已關閉。

但是,如果我在 WordPress 例如中建立頁面/index.php/newpage,它將始終返回 301。

當 WordPress 網站啟動並運行時,它未通過運行狀況檢查。

有什麼方法可以在 WordPress 中定義一個返回 200 的頁面嗎?希望它不需要額外的插件,因為我想避免維護額外的插件。

我的最後一招是為 php 伺服器新增一個將傳回 200 的 url。如果確實是最後的手段,那麼最好的實施方式是什麼?我不擅長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 一起使用)聽起來更像是一個hack,但如果wordpress 不起作用,你會得到5xx 錯誤,否則200=已安裝,200 =未安裝。

相關內容