単一のグローバルIPで複数のホストを扱う

Apache

私は自宅サーバーをESXiで仮想化して複数稼働させているのですが、そこで起こる問題が

複数のWEBサーバーを構築しているとNATの転送がポート不足、グローバルIPが一つの場合に複数のサーバーで分割して公開する方法を記録したいと思います。仮想化している場合複数に分割して運用した方が複数のサービスを運用するときに安全ですし、単一のサーバーにかかる負荷が少なくおすすめです。


管理人の環境

  • ドメイン名はwww.webserver1.net www.webserver2.net
  • ホスト、転送用サーバーは全てCentOS7 ESXiの仮想マシン

主な方法

私が考えた方法は

  • DNSサーバーを立てて、外からきたドメインを内部で解決、それぞれのIPアドレスに転送
  • ApacheのVirtualHost機能にあるProxyPassを利用する

以上の二つを考えました。

今回はWEBサーバーのみ増築しているので、比較的容易なApacheの機能を利用します。

イメージとしては以下のような構造にしていきたいと思います。

WEB Server1のドメインは192.168.200.2へ Server2のドメインは192.168.200.3へ転送

手順

  • 転送用サーバーでの作業

必要なパッケージのインストール

yum install -y httpd

インストール完了後、設定

vi /etc/httpd/conf/httpd.conf

以下の部分を追記、変更

<VirtualHost *:80> 
ServerName www.webserver1.net  #外からアクセスする名前(ドメイン名)
KeepAlive On 
ProxyPass / http://www.webserver1.net:80/ #転送先のサーバーのアドレス、パス
</VirtualHost>

<VirtualHost *:80> 
ServerName www.webserver2.net  #外からアクセスする名前(ドメイン名)
KeepAlive On 
ProxyPass / http://www.webserver2.net:80/ #転送先のサーバーのアドレス、パス
</VirtualHost>

LoadModule proxy_http_module modules/mod_proxy_http.so 
LoadModule proxy_module modules/mod_proxy.so

ServerNameでアクセスしてきた場合のパスとProxyPassが今回は同じにしています。基本これが通常だと思います。:wqで保存してください。

それぞれホストを分けて記述する方が仮想化環境でエラーや接続できない場合の原因の切り分けが楽です。


ポートの許可

CentOS側でのポートのアクセスを許可します。

firewall-cmd --add-port=80/tcp --zone=public --permanent
firewall-cmd --reload

二つのコマンドともsuccessと表示されれば完了です。

また、必要があれば念のためSELinuxを確認しておきましょう。

  • 転送先サーバーでの操作

基本的に以前公開できていれば変更点はありません。アクセス時のServerNameと転送用サーバーのProxyPassが同じであれば通ります。

  • その他操作

最後に、各ルーターポート転送設定で転送用サーバーのIPアドレスへ80/tcpを転送設定します。


以上で設定は終わりです。

コメント

タイトルとURLをコピーしました