Azure WebSites で WordPress のトラブルシューティングを行う際のヒント
このポストは、8 月 20 日に投稿した WordPress Troubleshooting Techniques on Azure Websites の翻訳です。
WordPress は Azure WebSites ギャラリーで提供されている一般的な Web アプリケーションの 1 つで、動的な Web サイトの構築に使用します。WordPress サイトを運用していると、何らかの問題が発生しトラブルシューティングを行う機会があるかと思いますが、この記事ではよくある問題について説明し、その対策をご紹介します。
自分の WordPress サイトで php.ini の構成を更新する方法
ユーザーに許可するファイル アップロード時の最大サイズを規定の 8 MB から 12 MB に変更するなど、アプリケーションの要件に応じて WordPress サイトの php.ini ファイルの変更が必要となる場合があります。
ユーザーが PHP の構成を定義する場合は、サイトのルート (D:\home\site\wwwroot) で .user.ini という名前のファイルを作成して、次の文を追加します。
upload_max_filesize = 12M
その後、Web サイトを再起動します。変更が上書きされたことを確認するには、次の文を含む phpinfo.php という名前の PHP ファイルを作成し、サイトのルート フォルダーに保存します。
<?php phpinfo(); ?>
次に、このファイルを参照して upload_max_size の値を確認します。
メディア コンテンツ (uploads フォルダー) のサイズが 10 GB で Web アプリケーションのサイズが 1 GB の場合、どの料金レベルが適切か検討する
各料金レベルでサポートされている Storage の容量は、Shared では 1 GB、Basic では 10 GB、Standard では 50 GB です。WebSites の Storage を最大限に活用したいとお考えの場合は、uploads フォルダーに格納されているすべてのメディア コンテンツを Azure Storage に移動し (この場合 0.048 米ドル/GB の料金がかかります)、WordPress サイトのメディア コンテンツの管理に Azure Storage プラグイン (英語) を使用します。これにより、メディア コンテンツを Web アプリケーションと分離させることができます。
また、メディア コンテンツのサービスを提供する Azure Storage アカウントの Azure CDN エンドポイントを作成することもできます。これを行うには、まずプラグインの設定ページで CNAME プロパティの設定を確認し、以下の欄に Azure CDN の名前 (https://az628210.vo.msecnd.net/ など) を入力します。
WordPress サイトで SSL をセットアップする方法
SSL は、Standard レベルと Basic レベルでのみサポートされています。サイトに SSL のサポートを追加する場合は、下記に関するページを参照してください。
Azure WebSites で mod_rewrite は使用できるか
Azure WebSites では IIS Web サーバーを使用しているため、Apache モジュールである mod_rewrite は使用できません。Azure WebSites ではその代わりに Url Rewrite モジュールが既定で有効になっており、web.config ファイルを使用して書き換えルールやリダイレクト ルールを作成できます。
これを行うには、まずサイトのルート フォルダー (D:\home\site\wwwroot) にある web.config ファイルを開きます。このフォルダーに web.config が存在しない場合は作成します。
次に、下記の XML 文をコピーして system.webServer 要素に貼り付けます。
<rewrite>
<rules>
<rule name="Main Rule" stopProcessing="true">
<match url=".*" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="index.php" />
</rule>
</rules>
</rewrite>
このルールは、すべての要求された URL について照合を行います。URL に対応するファイルやフォルダーがファイル システム内に存在しない場合は、ルールに従って URL が index.php に書き換えられます。その次に、書き換えられる前の URL に含まれている REQUEST_URI サーバー変数に基づいて、どのコンテンツをサービスとして提供するかが決定されます。
URL の書き換えルールの作成についての詳細は、「URL の書き換えに関する 10 のヒントとテクニック (英語)」を参照してください。
依存要求を .woff ファイルで行うときに 404.3 “Mime Type missing” エラーが発生する場合の対処
Azure WebSites の既定では .woff 拡張子は無効化されています。WordPress などのアプリケーションで .woff ファイルを使用する場合は、サイトのルート フォルダーにある web.config ファイルに下記の <system.webServer> の部分を追加します。
<configuration>
<system.webServer>
<staticContent>
<mimeMap fileExtension=".woff" mimeType="application/x-font-woff" /> </staticContent>
</system.webServer>
</configuration>
その後、Web サイトを再起動します。
Azure で実行している WordPress サイトのページの読み込みが遅い場合の対処
WordPress サイトの速度が遅い場合は、次の項目について確認してください。
- 料金レベルが Free ではありませんか。
Free レベルのパフォーマンスは運用環境には不十分です。Shared、Basic、Standard のいずれかのレベルへのアップグレードをお勧めします。Azure WebSites の料金詳細ページで各料金レベルの機能を確認し、適切なレベルを選択してください。
- Web サイトとデータベースが存在するデータ センターが異なっていませんか。
Web サイトが米国西部、データベースが米国東部に存在するなど、コンポーネントが存在するデータセンターの場所が異なっていると、データベースを呼び出すときにネットワークのレイテンシの影響によりページの読み込みが遅くなる場合があります。Web サイトとデータベースは同じリージョンの同じデータセンターに配置することをお勧めします。
- 無料の ClearDB MySQL データベースを使用していませんか。
無料の ClearDB MySQL データベースは、運用環境の Web サイトに向けたものではありません。Azure 用の ClearDB のプラン (英語) と Azure ストアから購入する方法をご確認ください。
PHP のエラーの診断結果を取得する方法
Azure WebSites では、Web サーバーの診断を有効にすると Web サーバーのログ記録、詳細なエラー メッセージ、失敗した要求のトレースなどが得られます。エラー情報の取得に関する詳細については、Azure WebSites での PHP の診断に関するブログ (英語) を参照してください。
新たに導入された Diagnostics as a Service (DaaS) では、これらのログを解釈し、問題解決を支援したり、ガイドとして役立つ情報を提供したりします。詳細については、Azure WebSites の Diagnostic as a Service (DaaS) に関するブログを参照してください。
WordPress で詳細なデバッグ機能を有効化する方法
WordPress では、WordPress サイトのデバッグに関してさまざまなオプションを提供しています。WordPress サイトのデバッグ機能を有効にするには、WP_DEBUG 定数をオンにします。既定では、この定数は wp-config.php ファイルでオフに設定されています。
define('WP_DEBUG', false);
この値を TRUE に設定して有効化します。
define('WP_DEBUG', true);
デバッグ作業が終了した後は、この機能は必ずオフにしてください。 WordPress のデバッグに関する詳細は、「WordPress でのデバッグ (英語)」を参照してください。
WordPress サイトで電子メール サービスを有効化する方法
Azure WebSites では電子メールおよび SMTP をサポートしていないため、Azure ストアで SendGrid を購入する必要があります。SendGrid の Free プラン (最大で 1 か月に 25,000 通の電子メールを利用可能) で、たいていの WordPress サイトに十分対応可能です。Free プランで不十分な場合は、こちらのページ (英語) で Azure 用の SendGrid のプランをご確認いただけます。
詳細については、「PHP から SendGrid 電子メール サービスを使用する方法」を参照してください。
WordPress サイトのバックアップと復元の方法
Azure WebSites には自動バックアップ機能と自動復元機能があります。詳細については、Azure WebSites のバックアップ方法と復元方法を参照してください。
WordPress サイトはオンラインで編集可能か
WebSites では、Visual Studio の機能を備えたオンライン エディターが使用できます。詳細については、Monaco を使用した Azure WebSites のオンライン編集に関するページ (英語) を参照してください。
WordPress でデータベース接続時のエラーを修正する方法
WordPress がデータベースと接続できない場合にはエラーが発生します。その原因には次のようなものが考えられます。
- wp-config.php ファイルのデータベース情報が不正確
MySQL Client でデータベースにアクセスして wp-config.php の情報を訂正します。
- WordPress サイトのフロントエンドとバックエンドのそれぞれでエラーの種類が異なるかどうかを確認する
WordPress の管理ページで “One or more database tables are unavailable. The database may need to be repaired” などの異なる種類のエラーが発生している場合には、データベースを修復する必要があります。この場合、wp-config.php に次の文を追加します。
define('WP_ALLOW_REPAIR', true);
追加したら、https://< サイトの URL>/wp-admin/maint/repair.php に移動し確認します。
いったんこの定義を設定すると、ユーザーはこの機能にアクセスする際にログインする必要がなくなります。この機能は破損したデータベースを修復することを主目的としたもので、データベースが破損している場合にはユーザーがログインできないことが多く、そうした状況に対応するためにこのような仕様になっています。データベースの修正と最適化が終了したら、必ずこの部分を wp-config.php から削除してください。
- wp-config.php が破損している可能性がある
wp-config.php を修正して、最終更新日時のタイム スタンプを変更します。
- 読み込み負荷が高いときにサイトで断続的にエラーが発生する
wp-includes/wp-db.php ファイルを下記のように変更して WordPress との固定接続を使用します。
PHP のバージョンが 5.4 以前の WordPress の場合
//1147 行目をコメントアウト
//$this->dbh = mysql_connect( $this->dbhost, $this->dbuser, $this->dbpassword, $new_link, $client_flags );
//次の行を追加
$this->dbh = mysql_pconnect( $this->dbhost, $this->dbuser, $this->dbpassword, $client_flags );
if ( false !== $error_reporting ) {
error_reporting( $error_reporting );
}
} else {
//1152 行目をコメントアウト
//$this->dbh = mysql_connect( $this->dbhost, $this->dbuser, $this->dbpassword, $new_link, $client_flags );
//次の行を追加
$this->dbh = @mysql_pconnect( $this->dbhost, $this->dbuser, $this->dbpassword, $client_flags );
}
PHP のバージョンが 5.5 以降の WordPress 3.9.1 の場合
//1378 行目
if ( WP_DEBUG ) {
//$host の前に 'p:'を追加
mysqli_real_connect( $this->dbh, 'p:'.$host, $this->dbuser, $this->dbpassword, null, $port, $socket, $client_flags );
}
else {
//$host の前に 'p:'を追加
@mysqli_real_connect( $this->dbh, 'p:'.$host, $this->dbuser, $this->dbpassword, null, $port, $socket, $client_flags );
}
WordPress の自動機能が有効になっている場合、このファイルが上書きされ変更内容が失われる場合があります。このため、WebJob 機能を使用してファイルの変更の有無を確認し、この変更が wp-db.php ファイルに適用されていない場合は改めて適用することをお勧めします。WordPress で使用している PHP のバージョンが 5.4 またはそれ以前の場合は、こちらのリンクから WebJob をダウンロードできます。PHP 5.5 を使用している場合はこちらのリンクをご利用ください。
- Web サイトのサービスがデータベースに接続できるかどうかを確認する
データベースに接続できるかどうかを確認するには、testdbconnection.php という名前の新しいファイルを作成して、次のコードを貼り付けます。
<?php
//データベースの接続情報に合わせて、mysql_connect の
//ホスト名、ユーザー、パスワードを設定
$link = mysql_connect('localhost', 'username', 'password');
if (!$link) {
die('Could not connect: ' . mysql_error());
}
echo 'Connected successfully';
mysql_close($link);
?>
ブラウザでこのページを実行して “Connected successfully” というメッセージが表示されたら、Web サイトのサービスがデータベースに接続可能であるということです。“Could not connect” というメッセージが表示された場合は、MySQL のエラーを確認して問題の原因を特定します。“Could not connect” が表示される場合に問題を解決できないときは、Azure サポートまでご連絡ください。
“1203 SQLSTATE: 42000 (ER_TOO_MANY_USER_CONNECTIONS)” というエラーの解決方法
解決方法は、使用している MySQL サーバーの種類によって異なります。
- ClearDB MySQL データベースを使用している場合、データベース プランに応じて max_user_connections の制限が適用されます。詳細についてはこちらのページ (英語) を参照してください。制限が適用された場合はこのエラーが発生します。プランをアップグレードするとこの問題は解消されます。
- MySQL Azure VM で WordPress サイト用のデータベースをホストしている場合は、my.ini (Windows の場合) または my.cnf (Linux の場合) の構成を編集します。
max_connections = 250
max_connections の設定値が高過ぎると、“Out of memory” エラーが発生して MySQL サーバーが強制終了します。MySQL サーバーの VM のメモリ容量を考慮しつつ適切な値を設定してください。
白い画面や空白ページが表示される場合の対処
Web サイトにアクセスしたときに白い画面や空白ページが表示される場合は、プラグインかテーマに関する問題が考えられます。こちらの手順ごとの説明 (英語) を参考にしながら、問題の原因となっているテーマやプラグインを特定してください。
メモリ容量不足のエラーが発生した場合の対処
メモリ容量は、既定では 128 MB に設定されています。メモリ容量の制限は次のいずれかの方法で引き上げることが可能です。
- wp-config.php に次の文を追加する
define('WP_MEMORY_LIMIT', '128M');
- サイトのルート (D:\home\site\wwwroot) にある .user.ini に次の文を追加する
memory_limit=256M
その後、Web サイトを再起動します。
Azure WebSites の機能やドキュメントへのフィードバックについて
新しいドキュメントへのご意見や不足している情報に関するご要望、新機能や既存機能へのご意見は、フォーラム (英語) からエンジニアリング チームまでお寄せください。
関連情報へのリンク