私は自宅サーバーをESXiで仮想化して複数稼働させているのですが、そこで起こる問題が
複数のWEBサーバーを構築しているとNATの転送がポート不足、グローバルIPが一つの場合に複数のサーバーで分割して公開する方法を記録したいと思います。仮想化している場合複数に分割して運用した方が複数のサービスを運用するときに安全ですし、単一のサーバーにかかる負荷が少なくおすすめです。
管理人の環境
- ドメイン名はwww.webserver1.net www.webserver2.net
- ホスト、転送用サーバーは全てCentOS7 ESXiの仮想マシン
主な方法
私が考えた方法は
- DNSサーバーを立てて、外からきたドメインを内部で解決、それぞれのIPアドレスに転送
- ApacheのVirtualHost機能にあるProxyPassを利用する
以上の二つを考えました。
今回はWEBサーバーのみ増築しているので、比較的容易なApacheの機能を利用します。
イメージとしては以下のような構造にしていきたいと思います。
手順
- 転送用サーバーでの作業
必要なパッケージのインストール
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を転送設定します。
コメント