2つのグローバルIPを1つのサーバーに付与し、それぞれのサイトにアクセスを流す。

こんにちは、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直接でアクセスが来たときにもそちらに流すため。ひとまずこれで問題ないはず・・・。