序章

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

前提条件

このガイドを開始するには、sudo権限を持つroot以外のユーザーが必要です。 このタイプのユーザーをセットアップするには、Ubuntu14.04初期セットアップガイドに従ってください。 また、システムにApacheをインストールする必要があります。 このガイドの最初の手順に従って、これを設定する方法を学びます。

カスタムエラーページの作成

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

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

  1. echo "<h1 style='color:red'>Error 404: Not found :-(</h1>" | sudo tee /var/www/html/custom_404.html
  2. 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
  3. echo "<h1>Oops! Something went wrong...</h1>" | sudo tee /var/www/html/custom_50x.html
  4. 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というデフォルトのサーバーブロックファイルを使用しますが、デフォルト以外のファイルを使用している場合は、独自のサーバーブロックを調整する必要があります。

  1. 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

    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>

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

ただし、クライアントがエラーページを直接要求できないように、構成のセットを追加します。 これにより、ページのテキストがエラーを参照しているが、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

    <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>

エラーページがクライアントから直接要求された場合、正しい環境変数が設定されていないため、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>

    ProxyPass /proxytest "http://localhost:9000"
</VirtualHost>

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

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

  1. sudo a2enmod proxy
  2. sudo a2enmod proxy_http

Apacheを再起動してページをテストする

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

  1. sudo apache2ctl configtest

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

  1. sudo service apache2 restart

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

http://server_domain_or_IP/thiswillerror

apache custom 404

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

http://server_domain_or_IP/proxytest

apache custom 50x

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

  1. sudo a2dismod proxy
  2. sudo a2dismod proxy_http

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

  1. sudo service apache2 restart

結論

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