apacheのVirtualHostは、サブドメインで違うコンテンツを運用するときによく使う方法です。
ただ、確認環境を用意するときは特にドメインを用意しない場合があります。
VirtualHostについて知識を集めるときに、サブドメインに関係する方法はよく出てきますが、ポートで対応する方法はあまり見つかりません。
さて、
今回は、ポート単位でページを出し分けする方法について記載します。
イントロダクション
この記事で得られること
- ポートでVirtualHostのホスティングする方法がわかる。
環境
種類 | バージョン |
---|---|
OS | CentOS 6.5 |
apache | 2.4.29 |
MariaDB | 10.1.30 |
php | 7.2.2 |
環境は前回作成したxampp環境を拡張しています。 http://blog.websandbag.com/entry/2018/03/19/000952
参考URL
下記が公式の解説ページです。
Apache Virtual Host documentation - Apache HTTP Server Version 2.4
バーチャルホストの例 - Apache HTTP サーバ バージョン 2.4
要件
ポートのみで切り替えますので、80番
と81番
のポートで切り替えるようにします。
- 80番ポートは、
hoge
ディレクトリ - 81番ポートは、
fuga
ディレクトリ
設定用のファイルのインクルードを有効にする。
VirtualHost用の設定ファイルを有効にします。
極端な話、httpd.conf
にそのまま記載しても良いと思います。
今回はapacheが用意している方法に合わせます。
httpd.conf
の中に、次の記述がありますので、コメント(#)を外します。
# Virtual hosts
Include etc/extra/httpd-vhosts.conf
xamppの場合、xamppのapacheのコンフィグは/opt/lampp/etc/httpd.conf
です。
VirtualHostの設定を記述
先ほど有効にした、httpd-vhosts.conf
の設定を変えます。
Listen 81 <VirtualHost <対象のIP>:80> ServerName hoge DocumentRoot /hoge/ <Directory "/hoge/"> Order allow,deny Allow from all Require all granted </Directory> </VirtualHost> <VirtualHost <対象のIP>:81> ServerName fuga DocumentRoot /fuga/ <Directory "/fuga/"> Order allow,deny Allow from all Require all granted </Directory> </VirtualHost>
もし、既に運用しているサーバーで追加設定を行う場合は、既に80番ポートの<Directory>
設定がされている場合があります。
その場合は、省略しても問題ありません。
また、今回は、Listen 81
だけ設定しています。
既にListen 80
を他の設定ファイルで宣言しているためです。
重複して設定できないので注意してください。
Tips
NameVirtualHostについて
情報を集めていると、NameVirtualHost
の設定を目にします。
NameVirtualHostは、バーチャルホストでアクセスを許可するIP、ポートを指定するためのものです。
しかし、この設定は次期バージョンから不要になるようです。
実は当初、NameVirtualHostの設定で、<対象のIP>:80
という設定をしていました。
この状態で、構文チェック(httpd -t
)すると項名のようなエラーメッセージが出力されました。
NameVirtualHost has no effect and will be removed in the next release
これは、メッセージに書いてあるように、「次期バージョンでは削除されます」という注意です。
apache2.4の時点では使用できるかもしれませんが、以降は使用しない、もしくは代案が出るのかもしれません。
apache再起動
設定が完了したら、サーバーを再起動します。
$ httpd -t # Syntaxエラーが出た場合は、別途調整してください。 $ httpd restart
ファイアウォールの許可
おそらく、この状態でアクセスするとconection refused
でページが表示できないと思います。
その場合、考えられる原因はファイアウォールです。
許可されているポートの確認は次のコマンド確認できます。
$ service iptables status # おそらく、Chain INPUT (policy ACCEPT)配下に、81番の設定がないはずです。
81番ポートからのアクセスが許可されていませんので、許可する設定に変えます。
対応方法
次の手順で行います。
$ iptables -I INPUT 6 -p tcp --dport 81 -j ACCEPT $ service iptables save
設定が終わると、次の状態になるかとおもいます。
$ service iptables status # 省略 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:81
これで、設定は終わりです。
この状態で、http://<IPアドレス>
とhttp://<IPアドレス>:81
でアクセスすれば、それぞれのページが表示できるようになるかと思います。