Apacheの設定
Apacheの設定を行います。
まずディレクトリ構成からですが、
通常Apacheをインストールした直後は/var/www以下が公開ディレクトリとなっています。
そこで今回は複数ホスト(マルチドメイン)を分かりやすく扱う為に以下のようにディレクトリ構成の変更を行いました。
/var/www/default/public ⇒ デフォルトの公開ディレクトリ
こうして後はサイトが増えるごとに
/var/www/任意のサイト名/public
として、追加していきます。
次にApacheのバーチャルホストの設定を行います。
Apacheにはバーチャルホストと言って、一つのWEBサーバで複数のホストを扱う機能があります。
バーチャルホストには2種類あって、一つはIPベースのバーチャルホスト。
これは一つのサーバに複数のIPアドレスを割り当て、Apache側でIPアドレスごとに公開ディレクトリを振り分けるという方式です。
もう一つは名前ベースのバーチャルホストです。
こっちは一つのIPアドレスに向いている複数のホストをホスト名ごとに公開ディレクトリに振り分けるという方式です。
今回調べたのは名前ベースのバーチャルホストの方です。
まずVirtualHostを有効にするための宣言を行います。
※*の部分、別にIPベースのバーチャルホストを実施している場合はサーバに割り当てらているIPアドレスの内、使いたい方のIPアドレスを記します。
$ sudo vim /etc/apache2/sites-available/exmaple
NameVirtualHost *:80
(LAN接続でNAT変換を行っている場合等はローカルIPアドレス、point to pointで接続している場合とかはグローバルIPアドレスが入りますね。)
これでApacheの80番ポートにてVirtualHostが可能になりました。
次に、ホスト名がexample.comで、公開ディレクトリをexampleとした場合
後はブラウザでexmaple.comにアクセスして/var/www/exmaple/publicが公開ディレクトリして使用されているか確認です。
// 設定ファイルを作成
$ sudo vim /etc/apache2/sites-available/exmaple
ServerName exmaple.com
ServerAlias www.exmaple.com
DocumentRoot /var/www/exmaple/public
// 作成した設定ファイルを有効にする
$ sudo a2ensite exmaple// Apacheの再起動
$ sudo apache2ctl graceful
次にSSLでのバーチャルホストです。
SSLの仕組上、名前ベースのバーチャルホストではSSLの運用が不可能のように思えますが(※)
それは認証局でのSSL認証を行いたい場合での話です。
(※SSL通信ではアクセス時にまず最初にSSL認証が行われますが、この時Apache側ではホスト名はまだ分からないので、
先頭の443番のVirtualHostディレクティブに記載されているSSLCertificateKeyFileの鍵ファイルが認証に使用されてしまう為です。)
テストサイトなどで認証が不正でも別に良い場合は、80番ポートの時と同じことを繰り返せば良い訳です。
つまり
を宣言し
$ sudo vim /etc/apache2/sites-available/exmaple-ssl
NameVirtualHost *:443
ということです。
$ sudo vim /etc/apache2/sites-available/exmaple-ssl
ServerName exmaple.com:443
ServerAlias www.exmaple.com:443
DocumentRoot /var/www/exmaple/public
SSLEngine On
SSLCertificateFile ****
SSLCertificateKeyFile ++++
$ sudo a2ensite exmaple-ssl
$ sudo apache2ctl graceful
また、どうしても複数サイトでSSL認証が必要な場合はポートでサイトを分ければそれはそれでOK。
ホスト名が一緒だから認証が通って当然ですね。
一例として僕のApache設定ファイル群を記します。(備忘録として書いているだけですが。。)
サイトexmaple-a(デフォルトファイル), exmaple-bをそれぞれHTTPとHTTPSで使用しています。
ちなみに別のホスト名で同じ公開ディレクトリを使用したい場合(パークドメイン)を行う場合は
$ cat /etc/apache2/sites-available/exmaple-a
## デフォルトの設定
DocumentRoot /var/www/exmaple-a/public
LogLevel warn
CustomLog /var/log/apache2/access.log combined
ErrorLog /var/log/apache2/error.log
Options FollowSymLinks
AllowOverride None
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Alias /doc/ "/usr/share/doc/"
Options Indexes MultiViews FollowSymLinks
## サイト別設定
NameVirtualHost *:80
ServerName exmaple-a.com
ServerAlias www.exmaple-a.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/exmaple-a/public
$ cat /etc/apache2/sites-available/exmaple-a-ssl
NameVirtualHost *443:
ServerName exmaple-a.com
ServerAlias www.exmaple-a.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/exmaple-a/public
SSLEngine on
SSLCertificateFile ****
SSLCertificateKeyFile ++++
SSLOptions +StdEnvVars
SSLOptions +StdEnvVars
BrowserMatch ".*MSIE.*" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
$ cat /etc/apache2/sites-available/exmaple-b
ServerName exmaple-b.com
ServerAlias www.exmaple-b.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/exmaple-b/public
$ cat /etc/apache2/sites-available/exmaple-b-ssl
ServerName exmaple-b.com
ServerAlias www.exmaple-b.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/exmaple-b/public
SSLEngine on
SSLCertificateFile XXXX
SSLCertificateKeyFile ----
SSLOptions +StdEnvVars
SSLOptions +StdEnvVars
BrowserMatch ".*MSIE.*" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
上記のServerNameディレクティブの下に
といった感じです。
ServerAlias example2.com
もちろんexample.comやexample2.comのDNS設定(Aレコード)は、
ドメインの管理画面だったり、LAN内のみの場合はルータの管理画面とかで別途設定が必要です。