序章

Ubuntuでは、ApacheWebサーバーはデフォルトでvar/www/htmlディレクトリに保存されているドキュメントを提供します。 このディレクトリは、ドキュメントルートと呼ばれます。 管理者またはユーザーがサーバーにリクエストを送信すると、ドキュメントルートから適切なファイルで応答します。

このディレクトリは通常、残りのオペレーティングシステムとともにルートファイルシステムにあります。 ただし、ドキュメントルートを別のマウントされたファイルシステムなどの別の場所に移動すると便利な場合があります。 たとえば、同じApacheインスタンスから複数のWebサイトにサービスを提供する場合、各サイトのドキュメントルートを独自のボリュームに配置すると、特定のサイトまたはクライアントのニーズに応じて拡張できます。

このガイドでは、Apacheドキュメントルートをデフォルトの場所var/www/htmlから新しい場所に移動します。

前提条件

このガイドを完了するには、次のものが必要です。

  • Ubuntu20.04サーバーとsudo権限を持つ非rootユーザー。 これらの権限を持つユーザーを設定する方法の詳細については、 Ubuntu20.04を使用したサーバーの初期設定ガイドをご覧ください。
  • サーバーにインストールされているApache。 Ubuntu20.04ガイドにApacheWebサーバーをインストールする方法に従ってこれを設定する方法を学びます。
  • ドメイン用に構成されたSSL。 Ubuntu20.04ガイドでLet’sEncryptを使用してApacheを保護する方法に従ってこれを構成します。
  • ドキュメントルートの新しい場所。 このチュートリアルでは、/mnt/volume_nyc3_01がこの新しい場所のディレクトリとして使用されます。 このガイドの手順では、マウントされたブロックストレージデバイスの例を使用していますが、システム上の任意のディレクトリの場所を新しいドキュメントルートとして使用して、Webコンテンツを提供できます。

DigitalOceanのブロックストレージボリュームを使用している場合は、このガイドで、ボリュームを作成して接続する方法を説明します。 新しいドキュメントルートの場所は、ニーズに基づいて構成できます。 ドキュメントルートを別のストレージデバイスに移動する場合は、デバイスのマウントポイントの下の場所を選択する必要があります。

ステップ1—ファイルを新しい場所にコピーする

前提条件のチュートリアルに従った場合、/var/www/your_domainに新しいドキュメントルートが作成されます。 対応するVirtualHostディレクティブに追加のドキュメントルートがある場合もあります。 関連するファイルを新しい場所にコピーする前に、現在のドキュメントルートの場所を確立することが重要です。

grepコマンドを使用して/etc/apache2/sites-enabledディレクトリを検索し、ドキュメントルートの場所を検索します。 これにより、焦点がアクティブなサイトに限定されます。 -Rフラグは、grepDocumentRootと完全なファイル名の両方を出力に出力することを保証します。

  1. grep -R "DocumentRoot" /etc/apache2/sites-enabled

次の出力は、現在のDocumentRootの場所を示しています。

Output
/etc/apache2/sites-enabled/your_domain-le-ssl.conf: DocumentRoot /var/www/your_domain /etc/apache2/sites-enabled/your_domain.conf: DocumentRoot /var/www/your_domain

既存の設定がある場合、結果はここに表示されているものと異なる場合があります。 いずれの場合も、grepからの出力を使用して、目的のファイルを移動し、適切な構成ファイルを更新していることを確認できます。

ドキュメントルートの場所を確認したので、rsyncを使用してファイルを新しい場所にコピーします。

注: rsyncコマンドを使用するときは、次の2つの点に注意してください。

  • your_domainの後にの末尾にスラッシュがあることに注意してください。 ここに末尾のスラッシュを含めない場合は、このディレクトリをサブディレクトリとして新しいドキュメントルートにコピーします。 たとえば、新しいドキュメントルートの構造は/var/www/mnt/volume_nyc3_01/your_domainになります。 これにより、新しいドキュメントルートからindex.htmlファイルを提供しようとしたときに問題が発生します。
  • 次に、新しいドキュメントルートディレクトリ/mnt/volume_nyc3_01noの末尾のスラッシュがあります。
  1. sudo rsync -av /var/www/your_domain/ /mnt/volume_nyc3_01

-aフラグはアクセス許可とその他のディレクトリプロパティを保持し、-vフラグは詳細な出力を提供するため、同期の進行状況を追跡できます。

出力には次のものが含まれている必要があります。

Output
sending incremental file list ./ index.html sent 265 bytes received 38 bytes 606.00 bytes/sec total size is 134 speedup is 0.44

ファイルを配置したら、これらの変更を反映するようにApache構成の変更に進むことができます。

ステップ2—構成ファイルを更新する

ファイルを見つけて新しいドキュメントルートにコピーした後、この新しい場所を指すように仮想ホストファイルを構成できます。

好みのエディタで/etc/apache2/sites-enabled/your_domain.confを開くことから始めます。 この例では、nanoを使用しています。

  1. sudo nano /etc/apache2/sites-enabled/your_domain.conf

DocumentRootで始まる行を見つけて、新しいルートの場所に置き換えます。 この例では、新しいルートの場所は/mnt/volume_nyc3_01です。

/etc/apache2/sites-enabled/your_domain.conf
<VirtualHost *:80>
    ServerAdmin sammy@your_domain
    ServerName your_domain
    ServerAlias www.your_domain
    DocumentRoot /mnt/volume_nyc3_01
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
RewriteEngine on
RewriteCond %{SERVER_NAME} =www.your_domain [OR]
RewriteCond %{SERVER_NAME} =your_domain
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

この<VirtualHost>ディレクティブの後に、これらの強調表示された行を追加して、サーバーがディレクトリ内のシンボリックリンクをたどることを確認します。

/etc/apache2/sites-enabled/your_domain.conf
. . .
</VirtualHost>

<Directory /mnt/volume_nyc3_01>
    Options FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

全体として、/etc/apache2/sites-enabled/your_domain.confファイルには、新しいDocumentRootの場所に固有の次の行がすべて含まれている必要があります。

/etc/apache2/sites-enabled/your_domain.conf
<VirtualHost *:80>
    ServerAdmin sammy@your_domain
    ServerName your_domain
    ServerAlias www.your_domain
    DocumentRoot /mnt/volume_nyc3_01
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
RewriteEngine on
RewriteCond %{SERVER_NAME} =www.your_domain [OR]
RewriteCond %{SERVER_NAME} =your_domain
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

<Directory /mnt/volume_nyc3_01>
    Options FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

保存してエディターを終了します。 CTRL + XYENTERの順に押すと、nanoを終了できます。

これらの変更を行った後、SSL構成に注意を向けることができます。 /etc/apache2/sites-enabled/your_domain-le-ssl.confファイルを開きます。

  1. sudo nano /etc/apache2/sites-enabled/your_domain-le-ssl.conf

前の構成ファイルと同様に、DocumentRootを変更して新しい場所を反映します。

/etc/apache2/sites-enabled/your_domain-le-ssl.conf
<IfModule mod_ssl.c>
<VirtualHost *:443>
    ServerAdmin sammy@your_domain
    ServerName your_domain
    ServerAlias www.your_domain
    DocumentRoot /mnt/volume_nyc3_01
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
. . .
</VirtualHost>
</IfModule>

このファイルを保存して閉じます。

これで、ドキュメントルートの新しい場所を反映するために必要な構成変更が行われました。

ステップ3—Apacheを再起動する

変更が完了したら、Apacheを再起動して結果をテストできます。

まず、新しい構成の構文がconfigtestで正しいことを確認します。

  1. sudo apachectl configtest

構文が正しい場合、出力は次のことを明らかにするはずです。

Output
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message Syntax OK

注:この出力の一番上の行を非表示にする場合は、/etc/apache2/apache2.confのグローバルApache構成ファイルにServerNameディレクティブを追加します。 ServerNameは、サーバーのドメインまたはIPアドレスにすることができます。

エディターでファイルを開きます。

  1. sudo nano /etc/apache2/apache2.conf

ServerNameディレクティブを、your_domainまたはサーバーのIPアドレスを使用して構成ファイルの下部に配置します。

/etc/apache2/apache2.conf
# This is the main Apache server configuration file.  It contains the
# configuration directives that give the server its instructions.
# See http://httpd.apache.org/docs/2.4/ for detailed information about
# the directives and /usr/share/doc/apache2/README.Debian about Debian specific
# hints.
...

ServerName your_domain

保存してエディターを終了します。

ただし、これは単なるメッセージであり、サイトの機能には影響しません。 出力にSyntax OKが含まれている限り、続行する準備ができています。

次のコマンドを使用して、Apacheを再起動します。

  1. sudo systemctl reload apache2

サーバーが再起動したら、影響を受けるサイトにアクセスして、期待どおりに機能していることを確認します。 すべてが正常に機能していることを確認したら、データの元のコピーを削除することを忘れないでください。

  1. sudo rm -Rf /var/www/your_domain

これで、Apacheドキュメントルートが新しい場所に正常に移動されました。

結論

このチュートリアルでは、Apacheドキュメントルートを新しい場所に変更する方法を学びました。 これは、単一のサーバーで複数のサイトを効果的にホストするなど、基本的なWebサーバーの管理に役立ちます。 また、ネットワークブロックストレージなどの代替ストレージデバイスを利用することもできます。これは、ニーズの変化に応じてWebサイトを拡張するのに役立ちます。