こんにちは、hacknoteのohnoです。
今回は依頼の中でグローバルIPを複数持つケースがあり、挙動確認を行ったので、そちらの共有をしたいと思います。
やりたいこと
- 111.111.111.111 hogehoge.com
- 222.222.222.222 fugafuga.com
のapache webサーバーを1台で管理する。試したのはApache/2.4.34。
AWS環境で行っているため変な言葉が出るかもしれないが、基本的にはApacheであればどこのでも大丈夫なはず。
復旧時に同時にサーバーが生きている状態からグローバルIPの関連付けを変更したいため、ローカルIPを使わずに設定を行いたい。
先に結論
ServerNameでグローバルIPを指定、ServerAliasでドメインを指定でうまくいきそう。
検証
いろんなとこで紹介されている、2つのNICをもたせてそれぞれのサイトに割り振るケースは、NICに付与したそれぞれのローカルIPで流すケースが多い
[root@ip html]# cat /etc/httpd/conf.d/ip1.conf <VirtualHost XXX.XXX.XXX.XXX(サーバーのローカルIP1):80> ServerName localhost DocumentRoot /var/www/html/ip1/ </VirtualHost> <Directory "/var/www/html/public_html"> Options All -Indexes AllowOverride All Require all granted # AuthUserFile /etc/httpd/basic/htpasswd # AuthName "Please enter your ID and password" # AuthType Basic # Require valid-user </Directory> [root@ip html]# cat /etc/httpd/conf.d/ip2.conf <VirtualHost ZZZ.ZZZ.ZZZ.ZZZ(サーバーのローカルIP2):80> ServerName localhost DocumentRoot /var/www/html/ip2/ </VirtualHost> <Directory "/var/www/html/public_html"> Options All -Indexes AllowOverride All Require all granted </Directory> [root@ip html]# cat /var/www/html/ip1/index.html ip1! [root@ip html]# cat /var/www/html/ip2/index.html ip2!
確かにこれでアクセスすると、NICのグローバルIPに来たアクセスがそのままNICのローカルIPで指定したVirtualHostに割り振られてアクセスが行く。
が、これだとローカルIPが変更されたときにダメになる。
ので以下にしてみた。
[root@ip~]# cat /etc/httpd/conf.d/ip1.conf <VirtualHost *:80> ServerName 111.111.111.111(グローバルIP) ServerAlias hogehoge.com DocumentRoot /var/www/html/ip1/ </VirtualHost> <Directory "/var/www/html/public_html"> Options All -Indexes AllowOverride All Require all granted </Directory> [root@ip~]# cat /etc/httpd/conf.d/ip2.conf <VirtualHost *:80> ServerName 222.222.222.222(グローバルIP) ServerAlias fugafuga.com DocumentRoot /var/www/html/ip2/ </VirtualHost> <Directory "/var/www/html/public_html"> Options All -Indexes AllowOverride All Require all granted </Directory>
<VirtualHost *:80>
で先に読まれたコンフィグの方にいってしまうかとも思ったのだが、問題なくこれではける模様。
ServerNameにIPを入れてるのはIP直接でアクセスが来たときにもそちらに流すため。ひとまずこれで問題ないはず・・・。