![如何在 WordPress 中建立一個回傳代碼 200 的 url?](https://rvso.com/image/697044/%E5%A6%82%E4%BD%95%E5%9C%A8%20WordPress%20%E4%B8%AD%E5%BB%BA%E7%AB%8B%E4%B8%80%E5%80%8B%E5%9B%9E%E5%82%B3%E4%BB%A3%E7%A2%BC%20200%20%E7%9A%84%20url%EF%BC%9F.png)
這是必需的,因為我需要在 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
目錄。
- 這使得在 Git 中維護項目變得更加容易,因為您可以簡單地忽略該
- 由於我的 WordPress 位於自己的目錄中,因此我喜歡使用自己的目錄
wp-content
來簡化專案管理。 - 您可以根據需要輕鬆修改它。
此運作狀況檢查僅檢查系統以確保其設定正確。無需查詢資料庫,因為健康檢查不需要這樣做。這是一個配置問題,應該在設定係統之前解決。
答案4
編輯:
我使用過/wp-admin/images/wordpress-logo.svg (在以前的版本中它與/favicon.ico 一起使用)聽起來更像是一個hack,但如果wordpress 不起作用,你會得到5xx 錯誤,否則200=已安裝,200 =未安裝。