WordプレスインスタンスのGCPにロードバランサーを実装する必要があるため、これが必要です。
ヘルステストに合格した場合、GCPはwordpressインスタンスにリクエストを転送するだけです。
ヘルスチェック画面の典型的な定義は次のとおりです
「要求パス」が200を返すことを期待しています。それ以外の場合、ターゲットシステムはダウンしていると見なされます。
ただし、wordpressでページを作成した場合、例:/index.php/newpage
、常に301を返します。
wordpressサイトが稼働している間は、ヘルスチェックに失敗します。
wordpress 200を返す)でページを定義する方法はありますか?追加のプラグインを維持しないようにしたいので、追加のプラグインは必要ないでしょう。
私への最後の手段は、200を返すphpサーバーにURLを追加することです。ただし、このURLのステータスは100%にならない場合がありますwordpressサイト(正常に機能しなくなる可能性があります)たとえば、mysqlの問題が原因です)それが本当に最後の手段である場合、それを実装する最良の方法は何ですか?私はphpの開発に熟練していません。
wordpressのバージョンは4.6.2です。
WordPressインストールフロントページをヘルスチェックに使用できます。これは、WordPressサイトが利用可能であることを示す最も信頼できるインジケータです。
それだけの価値があるので、WordPressサイトをコンテナにセットアップし、ヘルスチェックを成功させてから、トラフィックをそこに誘導する前に成功させなければなりませんでした。 "フロントページの提案"以降のみ動作しますWordPressがブラウザからインストールされています。その前に、302ステータスコードが_/wp-admin/install.php
_に返されます。コンテナフォルダをいじって、_/wp-includes/images/blank.gif
_をヘルスチェックパスとして使用します。これにより、ヘルスチェックが成功し、トラフィックがコンテナへのルーティングを開始しました。そこから、ブラウザを介してWordPressをインストールし、ヘルスチェックパスを変更することができました。 _/
_に戻る。
これは古い投稿ですが、このトピックはまだ関連性があり、受け入れられた回答は私のユースケースでは理想的ではないため、これについて詳しく説明しました。他の人がこれを行うことはお勧めしません。特に交通量の多いシステムの場合。
受け入れられた回答の私の問題は、ホームページをヘルスチェックとして使用することが推奨されていることです。サイトによっては、これで問題ない場合もありますが、ヘルスチェックで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でのプロジェクトのメンテナンスがはるかに簡単になります。wp-content
プロジェクト管理を簡素化します。このヘルスチェックは、システムが正しくセットアップされていることを確認するためにのみシステムをチェックします。これはヘルスチェックに必要ないため、DBをクエリする必要はありません。これは、最初にシステムをセットアップする前に処理する必要がある構成の問題です。
編集:
私は/wp-admin/images/wordpress-logo.svgを使用しました(以前のバージョンでは/favicon.icoで動作しました)ハックのように聞こえますが、wordpressが機能しない場合、それ以外の場合5xxエラー200 =インストール済み、200 =インストールされていません。