これは、WordPress インスタンス用に GCP にロードバランサを実装する必要があるために必要です。
GCP は、ヘルス テストに合格した場合にのみ、リクエストを WordPress インスタンスに転送します。
健康チェック画面の典型的な定義は次のとおりです。
「リクエスト パス」が 200 を返すことが期待されます。それ以外の場合、ターゲット システムはダウンしていると見なされます。
ただし、たとえば wordpress でページを作成すると/index.php/newpage
、常に 301 が返されます。
WordPress サイトは稼働していますが、ヘルスチェックに失敗します。
WordPress で 200 を返すページを定義する方法はありますか? 余分なプラグインをメンテナンスしたくないので、追加のプラグインが必要にならないことを願っています。
私にとって最後の手段は、200 を返す php サーバーに URL を追加することです。ただし、この URL の状態は、WordPress サイトの健全性を 100% 反映するとは限りません (たとえば、mysql の問題によりダウンする可能性があります)。これが本当に最後の手段である場合、それを実装する最良の方法は何ですか? 私は php 開発に精通していません。
wordpressのバージョンは4.6.2です
答え1
ヘルス チェックには WordPress インストールのフロント ページを使用できます。これは、WordPress サイトが利用可能であることを示す最も信頼性の高い指標です。
答え2
参考までに言うと、コンテナ内に WordPress サイトをセットアップし、ヘルス チェックを成功させてからでないと、トラフィックをそのサイトに誘導することができませんでした。「フロント ページ」の提案は、ブラウザから WordPress がインストールされた後にのみ機能します。それ以前は、 に 302 ステータス コードが返されます/wp-admin/install.php
。コンテナ フォルダでいろいろと調べ、 を/wp-includes/images/blank.gif
ヘルス チェック パスとして使用することにしました。これにより、ヘルス チェックが成功し、トラフィックがコンテナにルーティングされるようになりました。そこからブラウザから WordPress をインストールし、ヘルス チェック パスを に戻すことができました/
。
答え3
これは古い投稿ですが、このトピックはまだ関連性があり、受け入れられた回答は私の使用ケースには理想的ではないため、これについて意見を述べたいと思います。特にトラフィックの多いシステムでは、他の人にこれを行うことはお勧めしません。
受け入れられた回答に関する私の問題は、ホームページをヘルスチェックとして使用することを提案していることです。サイトによってはこれで問題ないかもしれませんが、ヘルスチェックで DB を照会する必要はないと思います。DB 接続が失敗しても、インスタンスは技術的には正常です。たとえば、RDS クラスターがダウンすると、ホームページに DB エラーが表示され、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
プロジェクト管理を簡素化するために独自のディレクトリを使用するのが好きです。 - 必要に応じて簡単に変更できます。
このヘルス チェックは、システムが正しく設定されていることを確認するためだけにシステムをチェックします。ヘルス チェックには DB をクエリする必要はありません。これは、システムをセットアップする前に処理する必要がある構成の問題です。
答え4
編集済み:
私は /wp-admin/images/wordpress-logo.svg を使用しました (以前のバージョンでは /favicon.ico で動作していました)。ハックのように聞こえますが、WordPress が動作しない場合は 5xx エラーが発生し、それ以外の場合は 200=既にインストール済み、200=インストールされていません。