Ubuntu 14.04でカスタムエラーページを使用するようにApacheを構成する方法

前書き

Apacheは、世界で最も人気のあるWebサーバーです。 十分にサポートされ、機能が豊富で、柔軟です。 Webページを設計するとき、ユーザーに表示されるすべてのコンテンツをカスタマイズすると役立つことがよくあります。 これには、利用できないコンテンツを要求したときのエラーページが含まれます。 このガイドでは、Ubuntu 14.04でカスタムエラーページを使用するようにApacheを構成する方法を示します。

前提条件

このガイドを始めるには、 `+ sudo +`権限を持つ非rootユーザーが必要です。 このタイプのユーザーを設定するには、https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-14-04 [Ubuntu 14.04の初期設定ガイド]に従ってください。 。 また、システムにApacheをインストールする必要があります。 https://www.digitalocean.com/community/tutorials/how-to-install-linux-apache-mysql-php-lamp-stack-on-ubuntu-14-の最初のステップに従ってこれを設定する方法を学びます04 [このガイド]。

カスタムエラーページを作成します

デモ用にいくつかのカスタムエラーページを作成しますが、カスタムページは明らかに異なります。

カスタムエラーページは、Ubuntu Apacheインストールがデフォルトのドキュメントルートを設定する `+ / var / www / html`ディレクトリに配置します。 「+ custom_404.html 」と呼ばれる404エラー用のページと、「 custom_50x.html +」と呼ばれる一般的な500レベルのエラー用のページを作成します。 テストするだけの場合は、次の行を使用できます。 それ以外の場合は、次の場所に独自のコンテンツを配置します。

echo "<h1 style='color:red'>Error 404: Not found :-(</h1>" | sudo tee /var/www/html/custom_404.html
echo "<p>I have no idea where that file is, sorry.  Are you sure you typed in the correct URL?</p>" | sudo tee -a /var/www/html/custom_404.html
echo "<h1>Oops! Something went wrong...</h1>" | sudo tee /var/www/html/custom_50x.html
echo "<p>We seem to be having some technical difficulties. Hang tight.</p>" | sudo tee -a /var/www/html/custom_50x.html

これで、クライアントリクエストがさまざまなエラーになったときに提供できる2つのカスタムエラーページができました。

エラーページを使用するためのApacheの構成

ここで、正しいエラー状態が発生したときにこれらのページを利用する必要があることをApacheに伝える必要があります。 設定したい `+ / etc / apache2 / sites-enabled `ディレクトリにある仮想ホストファイルを開きます。 ` 000-default.conf +`というデフォルトのサーバーブロックファイルを使用しますが、デフォルト以外のファイルを使用している場合は、独自のサーバーブロックを調整する必要があります。

sudo nano /etc/apache2/sites-enabled/000-default.conf

これで、Apacheにカスタムエラーページを指定できます。

エラーを正しいカスタムページに送信する

`+ ErrorDocument +`ディレクティブを使用して、各タイプのエラーを関連するエラーページに関連付けることができます。 これは、現在定義されている仮想ホスト内で設定できます。 基本的に、各エラーのhttpステータスコードを、発生したときに提供するページにマッピングするだけです。

この例では、エラーマッピングは次のようになります。

/etc/apache2/sites-enabled/000-default.conf

<VirtualHost *:80>
   ServerAdmin [email protected]
   DocumentRoot /var/www/html

   ErrorLog ${APACHE_LOG_DIR}/error.log
   CustomLog ${APACHE_LOG_DIR}/access.log combined






</VirtualHost>

この変更だけで、指定されたエラーが発生したときにカスタムエラーページを提供できます。

ただし、クライアントがエラーページを直接要求できないように、構成の追加セットを追加します。 これにより、ページのテキストがエラーを参照しているものの、httpステータスが「200」(リクエストが成功したことを示す)という奇妙な状況を防ぐことができます。

エラーページが直接要求されたときに404で応答する

この動作を実装するには、カスタムページごとに `+ Files `ブロックを追加する必要があります。 内部では、 ` REDIRECT_STATUS `環境変数が設定されているかどうかをテストできます。 これは、 ` ErrorDocument +`ディレクティブがリクエストを処理するときにのみ設定する必要があります。 環境変数が空の場合、404エラーが表示されます。

/etc/apache2/sites-enabled/000-default.conf

<VirtualHost *:80>

   . . .

   ErrorDocument 404 /custom_404.html
   ErrorDocument 500 /custom_50x.html
   ErrorDocument 502 /custom_50x.html
   ErrorDocument 503 /custom_50x.html
   ErrorDocument 504 /custom_50x.html












</VirtualHost>

エラーページがクライアントから直接要求された場合、正しい環境変数が設定されていないため、404エラーが発生します。

500レベルエラーのテストのセットアップ

存在しないコンテンツをリクエストすることで、簡単に404エラーを生成して構成をテストできます。 500レベルのエラーをテストするには、正しいページが返されることを確認できるように、ダミープロキシパスを設定する必要があります。

仮想ホストの下部に `+ ProxyPass `ディレクティブを追加します。 ` / proxytest +`のリクエストをローカルマシン(サービスが実行されていない)のポート9000に送信します。

/etc/apache2/sites-enabled/000-default.conf

<VirtualHost *:80>

   . . .

   ErrorDocument 404 /custom_404.html
   ErrorDocument 500 /custom_50x.html
   ErrorDocument 502 /custom_50x.html
   ErrorDocument 503 /custom_50x.html
   ErrorDocument 504 /custom_50x.html

   <Files "custom_404.html">
       <If "-z %{ENV:REDIRECT_STATUS}">
           RedirectMatch 404 ^/custom_404.html$
       </If>
   </Files>

   <Files "custom_50x.html">
       <If "-z %{ENV:REDIRECT_STATUS}">
           RedirectMatch 404 ^/custom_50x.html$
       </If>
   </Files>


</VirtualHost>

完了したら、ファイルを保存して閉じます。

次のように入力して、 `+ mod_proxy `および ` mod_proxy_http +`モジュールを有効にします。

sudo a2enmod proxy
sudo a2enmod proxy_http

Apacheの再起動とページのテスト

次のように入力して、構成ファイルの構文エラーをテストします。

sudo apache2ctl configtest

報告された問題に対処します。 ファイルに構文エラーが含まれていない場合は、次を入力してApacheを再起動します。

sudo service apache2 restart

これで、サーバーのドメインまたはIPアドレスにアクセスして存在しないファイルを要求すると、設定した404ページが表示されます。

http:///thiswillerror

image:https://assets.digitalocean.com/articles/nginx_custom_error_1404/custom_404.png [apache custom 404]

ダミープロキシパス用に設定した場所に移動すると、カスタム500レベルページで「503サービスを利用できません」というエラーが表示されます。

http:///proxytest

画像:https://assets.digitalocean.com/articles/nginx_custom_error_1404/custom_50x.png [apache custom 50x]

戻って、Apache configから偽のプロキシパス行を削除できます。 プロキシモジュールを他の場所で使用する必要がない場合は、無効にすることができます。

sudo a2dismod proxy
sudo a2dismod proxy_http

サーバーを再起動して、これらの変更を実装します。

sudo service apache2 restart

結論

これで、サイトのカスタムエラーページを提供するはずです。 これは、ユーザーが問題を経験している場合でも、ユーザーエクスペリエンスをパーソナライズする簡単な方法です。 これらのページの1つの提案は、ヘルプや詳細情報を入手できる場所へのリンクを含めることです。 これを行う場合は、関連するエラーが発生している場合でもリンク先にアクセスできることを確認してください。

Related