Apacheがインストールされて実行されたので、仮想ホストを使用して、複数のドメインにサービスを提供するようにApacheを構成できます。 。
この例では、domain1.comとdomain2.comの2つのドメインを使用しています。
-
ホームディレクトリに、public_htmlフォルダを作成します。
cd ~ mkdir public_html
-
ホストするドメインごとに、標準のサブフォルダーのセットを含むフォルダーを作成します。次のコマンドは、domain1.comおよびdomain2.comのフォルダーpublic、private、log、cgi-bin、およびbackupを作成します。
mkdir -p public_html/domain1.com/{public,private,log,cgi-bin,backup} mkdir -p public_html/domain2.com/{public,private,log,cgi-bin,backup}
index.htmlを作成
パブリックフォルダの内容はあなた次第ですが、この例では、仮想ホストの動作を確認できるように、非常に単純なHTMLファイルを使用しています。
-
ドメインごとに、index.htmlファイルを作成します。
nano public_html/domain1.com/public/index.html
-
次のコードをindex.htmlファイルに追加します。
<html> <head> <title>domain1.com</title> </head> <body> <h1>domain1.com</h1> </body> </html>
-
このプロセスを繰り返して、domain2.comの同様のファイルを作成します。
domain1.com
のすべてのインスタンスを置き換えます。domain2.com
を使用 。
これで、2つのドメインの基本構造ができたので、2つの仮想ホストを定義できます。
仮想ホストでは、NameVirtualHost設定によって混乱が生じることがよくあります。
Apacheがリッスンするように設定されている各インターフェイスとポートには、NameVirtualHostディレクティブが必要です。ディレクティブは、ポートごとに1回だけ定義できます。
UbuntuオペレーティングシステムのApacheレイアウトでは、ports.conf
にデフォルトのNameVirtualHostdirectiveがあります。 ファイル。
次のコマンドを実行して、ports.conf
の内容を確認します。 :
cat /etc/apache2/ports.conf
次の出力が表示されます(以前にファイルを変更していない場合):
# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default
NameVirtualHost *:80
Listen 80
<IfModule mod_ssl.c>
# SSL name based virtual hosts are not yet supported, therefore no
# NameVirtualHost statement here
Listen 443
</IfModule>
デフォルトのNameVirtualHost設定は、現在の要件を満たしています。Apacheは、ポート80の使用可能なインターフェイス(*)で行われるHTTP要求に対して、名前付きベースの仮想ホストロジックと設定を適用します。
注 :「ports.conf」でのデフォルトのNameVirtualHostディレクティブの配置は、UbuntuオペレーティングシステムのApacheレイアウトの新機能です。以前のリリースでは、同様の設定がデフォルトの仮想ホストに配置されていました。
これで、独自の仮想ホストを追加して、ドメインの提供を開始できるようになりました。
domain1のvhostファイルを作成します:
sudo nano /etc/apache2/sites-available/domain1.com.conf
内容は次のとおりです。
# Place any notes or comments you have here
# It will make any customisation easier to understand in the weeks to come
# domain: domain1.com
# public: /home/demo/public_html/domain1.com/
<VirtualHost *:80>
# Admin email, Server Name (domain name) and any aliases
ServerAdmin [email protected]
ServerName domain1.com
ServerAlias www.domain1.com
# Index file and Document Root (where the public files are located)
DirectoryIndex index.html
DocumentRoot /home/demo/public_html/domain1.com/public
# Custom log file locations
LogLevel warn
ErrorLog /var/log/apache2/error-mydomainname.com.log
CustomLog /var/log/apache2/access-mydomainname.com.log combined
</VirtualHost>
次のようにサイトを有効にします。
sudo a2ensite domain1.com
コマンドの出力は次のとおりです。
Site domain1.com installed; run /etc/init.d/apache2 reload to enable.
推奨されるコマンドを実行します:
sudo /etc/init.d/apache2 reload
一部のインターネットネームサーバーにDNSゾーンとレコードを作成せずにドメインをテストするには、ローカルコンピューターの「/ etc / hosts」ファイルを変更して、「domain1.com」、「domain2.com」などをマッピングするエントリを含めることができます。デモCloudServerのパブリックIPアドレスへ:
127.0.0.1 localhost
...
# entries related to the demo Cloud Server
123.45.67.890 domain1.com
123.45.67.890 www.domain1.com
123.45.67.890 domain2.com
...
「hosts」ファイルの場所は、ローカルコンピュータにロードされているOSによって異なります。
注 :「hosts」ファイルのエントリは、インターネットネームサーバーで作成されたライブDNSゾーンとレコードをテストして使用する前に削除する必要があります。削除しないと、混乱を招き、新規または変更されたパブリックDNSレコードのテストが不正確になる可能性があります。
>テスト目的でこのような変更を加えると、ローカルコンピューターのWebブラウザーでサイトに移動でき、public/index.htmlファイルの内容が表示されます。
ServerAliasを使用する
vhostファイルでServerAliasを設定することに注意してください。 DNSが正しく設定されていれば、そのアドレスを使用することもできます。
書き換えルールに関する後の記事で、いずれかのアドレスを強制する方法について説明します。
domain2.comを作成して有効にするには、次の手順を繰り返します。
-
vhostファイルを作成します:
sudo nano /etc/apache2/sites-available/domain2.com ... # Enter the details for domain2.com as per the example shown above
-
サイトを有効にしてApacheを再起動します:
sudo a2ensite domain2.com ... sudo /etc/init.d/apache2 reload
-
2番目のドメインに移動します:
https://domain2.com or https://www.domain2.com
「domain2.com」インデックスファイルが表示されます。
vhostsファイルで定義されているように、各ドメインには独自のログファイルがあります。
ドメインのログを一覧表示します:
ls /var/log/apache2/error-mydomainname.com.log
出力は期待どおりです:
access.log error.log
デフォルトの仮想ホストを変更しましたが、そのままにしておきました。
誰かがクラウドサーバーのIPアドレスを入力すると、そのデフォルトのvhostsファイルの内容が提供されます(IPアドレスに個別のvhostを設定しなかった場合)。
なぜそれらはそのvhostファイルから提供されるのですか?
Apacheは、有効な仮想ホストファイルをアルファベット順に検索し、要求されたIPアドレスまたはドメイン名のファイルが見つからない場合は、最初のファイルを(アルファベット順に)提供します。
デフォルトの仮想ホストファイルを無効にするか削除した場合は、domain1.comのコンテンツが表示されます(domain2.comの前にアルファベット順で表示されます)。
これはあなたのウェブサイトを計画するときに考慮すべきことです。特定のドメインをデフォルトにしますか? IPアドレスの内容を完全に変えたいですか?
サーバー管理者のメールアドレスを設定します。このアドレスは、エラーが発生したときに連絡するようにサーバーを設定する場合に使用されます。値がEmailに設定されている場合は、ServerSignatureにも表示されます。 (Apacheフッターの定義のセクションを参照してください。 。
ServerAdmin [email protected]
仮想ホストのドメイン名(ServerName)を設定します。必要に応じて、asmanyエイリアス(ServerAlias)を使用できます。たとえば、domain.comとdomain.netが同じコンテンツを指すようにすることができます。
ServerName domain.com
ServerAlias www.domain.com
注 :これは書き換えルールではありませんが、ここで定義されたドメインは同じコンテンツを提供します(Cloud Server IPを指すようにDNSを設定していると仮定します)。
インデックスファイル(ドメインアドレスを入力したときに表示されるホームページ)を定義します。これは、ユーザーを別のページまたは非標準のホームページに誘導する場合に役立ちます。
DirectoryIndex index.html
注 :これは、ユーザーをリダイレクトするための適切な方法ではありません。これは、domain.com / index.phpなどの指定されていないページに直接移動する可能性があるためですが、DirectoryIndex値はdomain.comにアクセスするユーザーに対してのみ機能します。
ドメインの公開ファイルの場所を定義します。絶対パス名を使用してください。
DocumentRoot /home/demo/public_html/domain.com/public
ログレベルと仮想ホストのログファイルの場所を設定します。
LogLevel warn
ErrorLog /var/log/apache2/error-mydomainname.com.log
CustomLog /var/log/apache2/access-mydomainname.com.log combined
すべての標準エラーメッセージに使用されるErrorDocumentを設定します。
ErrorDocument 404 /errors/404.html
ErrorDocument 403 /errors/403.html
この例では、パブリックディレクトリに「errors」フォルダがあります。各エラードキュメントが作成され、errorsフォルダに配置されました。表示されるパスは、前に定義したDocumentRootフォルダーからの相対パスです。
エラーメッセージが定義されていない場合、Apacheは独自のエラーページを生成します。カスタムエラーページはよりユーザーフレンドリーで、必要に応じてカスタマイズできます。
Apacheフッターを定義する
ServerSignatureを定義して、サーバーの詳細をサーバーで生成されたエラーページまたはインデックスリストに表示するかどうかを指定します。オプションは、オン、オフ、および電子メールです。
ServerSignature On
シグニチャの詳細レベルは、仮想ホストファイルで設定できないServerTokensを介して構成されます。 UbuntuオペレーティングシステムのApachelayoutの場合、これは「/etc/apache2/conf.d/security」で適切に設定されます。詳細については、Apache構成#2NEEDLINKの記事を参照してください。
ServerSignatureがEメールに設定されている場合 、ServerAdminの電子メールが表示されます。
cgi-binを有効にする
カスタム仮想hostslayoutで定義されているcgi-binの場所を有効にします。必要に応じて、cgi-binをDocumentRootの場所に残すことができます。
ScriptAlias /cgi-bin/ /home/demo/public_html/domain.com/cgi-bin/
<Location /cgi-bin>
Options +ExecCGI
</Location>
指定したディレクトリのオプションを設定します。次の例では、domain.comのパブリックディレクトリに対してFollowSymLinksオプションを有効にします。
Options FollowSymLinks
設定できるその他のオプションは次のとおりです。
ディレクトリブラウジングをオフにするには、-Indexesを使用します。ディレクトリブラウジングをオンにするには、+Indexesを使用します。
Options -Indexes
SSIオプション
サーバーサイドインクルードを有効または無効にします。次の例はそれを無効にします。
Options -Includes
シンボリックリンクをたどるオプションを有効または無効にします。このオプションはセキュリティリスクにつながる可能性があるため、注意してください(誤って構成フォルダにリンクする)。
Options -FollowSymLinks
FollowSymLinksの代わりにSymLinksIfOwnerMatchディレクティブの使用を検討できます。 SymLinksIfOwnerMatchディレクティブを使用すると、リンクの所有者がターゲットファイルまたはディレクトリの所有者と同一である場合にのみシンボリックリンクをたどることができます(Linuxファイルシステムの所有権/権限に関して)。これにより、単純なFollowSymlinksディレクティブが作成する可能性のあるセキュリティリスクの多くを防ぐことができます。
.htaccessオプション
.htaccessサポートを無効にするには、AllowOverrideをNoneに設定します。サポートを許可するには、[すべて]に設定します。
AllowOverride None
次のように、有効にする.htaccess機能を指定することもできます。
AllowOverride AuthConfig Indexes
ApachehtaccessとAllowOverridedocsには、さまざまな機能に関する詳細情報があります。
.htaccessファイルを明確に保護することを忘れないでください。これを行うには、名前をわかりにくい名前に変更し、外部ソースからのファイルへのアクセスアクセスを拒否します。
AccessFileName .myobscurefilename
<Files ~ "^\.my">
<SatisfyAll>
Require all denied
</SatisfyAll>
</Files>
注 :上記の例は、Apache2.4用にフォーマットされています。 2.2を使用している場合は、**
使用可能なすべてのオプションをオフにするには、[なし]を指定します。
Options None
次の例に示すように、optionsディレクティブはディレクトリごとに設定できます。
AllowOverride None
Options None
AllowOverride All
最初のディレクトリ設定では、すべてのオプションがオフになり、すべてのディレクトリの.htaccessサポートが無効になります。
ただし、2番目のディレクトリ設定は最初のディレクトリ設定を上書きし、domain.com/publicディレクトリの.htaccessサポートを許可します。
仮想ホストファイルは使いやすいツールですが、非常に強力なツールです。1つの設定を入力して、それをテストすることをお勧めします。次に、次の設定を入力してテストします。
慣れると、すべてのWebフォルダとファイルを細かく制御できるようになります。