it-swarm-ja.com

1つのパブリックIPの背後にある複数のWebサーバー

長年の読者の初めてのポスター(彼)。これが私のジレンマです。私は何人かの友人のために自宅で3つのサイトをホストしていますが、大きなものは何もありません。すべてwordpressサイトです。VMWareWorkstationで実行しています。大量のRAMを用意しているので、心配する必要はありません。リソースフロント。サイト#2を構築しているときに、「CRAP!...ルーターを通過してこれらをルーティングするにはどうすればよいですか?」と気づきました。異なるVM上にあります。1/ 3はそれほど重要なサイトではありませんが、何かが発生した場合は、すべてを同時にダウンさせたくはありません。

私は一般的なLinksysルーターを持っています(ひどい新しいスマートWifiを備えています)。男私はファームウェアを良いものに変更する必要がありますが、それは別の日です。つまり、1つのパブリックIP、3つのVMはすべて、一意の内部IP、つまり192..1/2/3を備えています。ルーターは、同じポート(80)を使用して複数のIPにポート転送することを許可しません。

やることがたくさんある場合は、弾丸を噛んで同じVM)に移動し、異なるサイトをvhostしますが、私の考えは別のVMを使用することでした。仮想ルーター。 pfSense、m0n0wallのようなルーター/ファイアウォールVMを考えてみてください。シンプルで簡単に実行できるものを探していますが、ポート80の要求を受け取ることで、vhostのように動作する必要があると思います。次に、ルーターを使用して、ホストヘッダーを使用してWebサーバーを保持している3つのVMにトラフィックを分散します(私は思います)。

誰か提案、より良い方法などがありますか?事前に大いに感謝し、それらをすべて1つのVM屋根の下に置くと、これは即座に解決されます。私の場合、VMの分離はそれよりも優先されます。

しかし、非常にオープンな考えです。乾杯。

2
Hunter

ドメイン名を使用してトラフィックを適切なVMに転送するプロキシとしてもう1つのVMを設定します。

3

私はさまざまなソリューションを試しましたが、成功したのはApache2の使用です。それは仮想ホスティング機能が付属しています。

Apache2を少し「配線」する必要がありますが、ガイドとしてconfを含めています。仕組み:Apache2は「名前ベースのドメイン」機能で動作し、必要な数のサイトを1つのパブリックIPで実行します。 [私はこれらの多くのサイトの理由を説明する開発者です]。

   $ Sudo apt-get install -y Apache2 Apache2-dev Apache2-threaded-dev

Confの最後にこれらの3行を追加して、Apache2.confを配線します

   include httpd.conf
   <VirtualHost *>
   </VirtualHost>

このガイドを使用してhttpd.confを構成します。ケースに合わせて調整してください。デフォルトでは、新規インストールとしてhttpd.confは表示されませんが、Apache2はhttpd.confが/ etc/Apache2ディレクトリにあることを検出すると応答します。

    $ Sudo touch /etc/Apache2/httpd.conf

これをhttpd.confに追加します。大きな重点は、:80をそのままにしておくことです。 '## EDIT THIS *'が表示された場合;ここで、他の人に手を触れずに、自分の好みに合わせて編集することができます。

   <Directory "/var/www">  ***## EDIT THIS***
      Options Indexes FollowSymLinks
      AllowOverride All
   </Directory>

    <location /cgi-bin>
    AddHandler cgi-script .cgi .pl
    Options -Indexes +FollowSymlinks +ExecCGI
    </location>


  <VirtualHost *:80>
    ServerName example.ca  ***## EDIT THIS***
    ServerAlias www.example.ca ***## EDIT THIS***
    DocumentRoot /var/www/example_ca/html ***## EDIT THIS***
    <Location "/">
            Order Deny,Allow
            Deny from all
            Allow from all
    </Location>
      CustomLog /path/to/your/preferred/log-folder/access.log common ***## EDIT THIS***
      ErrorLog /path/to/your/preferred/log-folder/error.log ***## EDIT THIS***
   </VirtualHost>

  <VirtualHost *:80>
    ServerName sample.ca ***## EDIT THIS***
    ServerAlias www.sample.ca ***## EDIT THIS***
    DocumentRoot /var/www/sample_ca/html ***## EDIT THIS***
    <Location "/">
            Order Deny,Allow
            Deny from all
            Allow from all
    </Location>
      CustomLog /path/to/your/preferred/log-folder/access.log common ***## EDIT THIS***
      ErrorLog /path/to/your/preferred/log-folder/error.log ***## EDIT THIS***
   </VirtualHost>

その後...

   $ Sudo service Apache2 restart

そして出来上がり!幸運を!

編集:覚えておいてください-サイトをセットアップし、ローカルネットワークで動作することをテストした後、DNSサービスプロバイダー(これらのドメインを登録した場所)でDNSを更新し、IPアドレス(マシンをホストしている場所)を更新する必要がありますこれらのマルチサイト)。

2
Faron

ルーターは、同じポート(80)を使用して複数のIPにポート転送することを許可しません。

ちなみに、これは標準のTCP/IPでは不可能です。プログラム、つまりプロキシが必要です。ポートでリクエストを受け入れ、リクエストを確認し、それに応じてリクエストをシャントします。


Apacheおよびその他のWebサーバーには、着信トラフィックを「分割」するために使用できる「リバースプロキシ」機能があります。リバースプロキシは、特定のWebパス、つまり「yourdomain/directory1」の要求を別のWebサーバーにスローし、そのWebサーバーからの応答を元のクライアントにスローするようにApacheに指示します。

ただし、このWebサーバー(PHPなど)でアプリケーションを実行している場合は、外部に面したURLが異なるため、設定を変更する必要がある場合があることに注意してください。リンクを正しく生成できるように、PHPアプリケーションに「yourdomain」ではなく「yourdomain/directory1」にあることを通知する必要がある場合があります。バックエンドサーバーからのトラフィックを書き換えるようにApacheに指示することができます。クライアントに返す前に、これは難しいので、可能であれば避けたいと思います。Javascriptでリンクを生成するアプリケーションは特に問題になる可能性があるため、すべてのWebアプリケーションが簡単に「逆プロキシ可能」であるとは限りません。

したがって、Apacheを4番目の「フロントエンド」にインストールしますVM-着信TCP 80をこのVMに転送します。これも確認する必要がありますVMは、「仮想ネットワーク」上の他のVMに到達できます。次に、「フロントエンド」VMで、Webサイトごとに個別のリバースプロキシを設定できます。

ここ は、ProxyPassおよびProxyPassReverseディレクティブを使用した、関連するApache構成の詳細です。

また、パフォーマンスを向上させるために、精巧にキャッシュを実装することもできます。

1
LawrenceC