web-dev-qa-db-ja.com

別々のサーバーで複数のドメインをホストしますが、パブリックIPアドレスは1つだけです

同じパブリックIPアドレスで異なるドメインを持つ複数のWebサイトをホストする方法はありますか?ユーザーが入力すると、たとえば、プライベートネットワーク(192.168.1.20)上の1つのサーバーに移動するexample1.comと、192.168に移動するexample2.com .1.21?私はVMホストを持っていて、ターンキーlinuxソリューションのいくつかを試してみたいと思っています。それらを使用することにしたときに、それらのサイトを公開してアクセスできるようにできれば素晴らしいと思います。ソリューションの多くは私はここでリダイレクトを使用することに遭遇しましたが、それがどのように機能するかについての適切な説明が見つかりませんでした。ユーザーがブラウザでリダイレクトが発生するのを見ますか?遅いですか?私は持っている必要があると思いますポート80でリッスンしてから他のサーバーにリダイレクトするApacheを実行している1つの「マスター」サーバー?

4
Kyle

これを行う必要があるたびに、HAProxyにフォールバックします。これは、単一(または複数)のパブリックIPの背後で複数のサービスをホストできるようにする別のリバースプロキシパッケージです。

この例では、パブリックアドレスを使用してマシンにHAproxyをインストールします。

これは、選択したディストに応じて、APT-GETまたはYUMから実行できます。インストールしたら、設定ファイルを見てください(Ubuntuでは/etc/haproxy/haproxy.cfgにあります)

HAProxyは、FRONTENDSとBACKENDS、フロントエンドを使用してIP:PORTにバインドし、次にサーバー(1つ以上)を指定するバックエンドを使用します。

これは、単一のホームIPの背後で複数のWebサービスアプリケーションを実行するための構成の例です。私の場合、バックエンドの同じIPで複数のポートを使用しているので、例では、ポート80で別のIPを使用したいとします。

#GLOBAL CONFIG
global
        maxconn         1000
        daemon
        user            haproxy
        group           haproxy
        nbproc          1
        pidfile         /var/run/haproxy.pid
        stats socket    /var/run/haproxy.cmd mode 777 level admin

#ASSUMED DEFAULTS
defaults
        log             global
        mode            http
        option          httplog
        option          dontlognull
        retries         3
        maxconn         1000
        contimeout      5000
        clitimeout      50000
        srvtimeout      50000

#STATS PAGE
listen stats 192.168.10.253:9000
        mode http
        stats enable
        stats auth     username:password
        stats uri      /proxy_stats
        stats realm     PAGE TITLE

####SABNZBD####
backend sabnzbd
        server          sabnzbd 192.168.10.253:8080 weight 1 maxconn 1000 check inter 10000
        option          redispatch
        option          httpclose
        option          forwardfor
        balance         roundrobin

        timeout server  120000

####SICKBEARD####
backend sickbeard
        server          sickbeard 192.168.10.253:8081 weight 1 maxconn 1000 check inter 10000
        option          redispatch
        option          httpclose
        option          forwardfor
        balance         roundrobin
        timeout server  120000

####COUCHPOTATO####
backend router
        server          router 192.168.10.254:80 weight 1 maxconn 1000 check inter 10000
        option          redispatch
        option          httpclose
        option          forwardfor
        balance         roundrobin
        timeout server  120000

####TROLL####
backend troll
#        server          troll www.meatspin.com:80 weight 1 maxconn 1000 check inter 10000
         server          troll www.google.com:80 weight 1 maxconn 1000 check inter 10000
        option          redispatch
        option          httpclose
        option          forwardfor
        balance         roundrobin
        timeout server  120000


#NAS FrontEnd
frontend nas
        bind            PUBLIC_IP:80
        reqadd          X-Forwarded-Proto:\ http
        default_backend troll

        acl req_couchpotato hdr_beg(Host) -i film.
        acl req_sickbeard hdr_beg(Host) -i tv.
        acl req_router hdr_beg(Host) -i home.
        acl req_sabnzbd hdr_beg(Host) -i warez.

        use_backend couchpotato if req_couchpotato
        use_backend sickbeard if req_sickbeard
        use_backend sabnzbd if req_sabnzbd
        use_backend router if req_router

これを設定し、フロントエンドでPUBLIC_IPを構成すると、myserverはポート80でリッスンし、着信リクエストのhttpヘッダーを確認し、film.mypersonaldomain.comのリクエストを確認した場合、tv.mypersonaldomainを確認した場合はcouchpotatoバックエンドを使用しました。 .comはsickbeardバックエンドを使用します。

これをテストしているときに使用した「トロール」設定に注意してください。一致するURLを指定せずにパブリックIPにアクセスした場合のデフォルトのバックエンドは、meatspin.comにリクエストを送信することでした(重要な場合は、このアドレスにアクセスしないでください) EYES)、この例では、これをgoogle.comに置き換えました。

HAProxyを使用すると、さらに多くのことができるようになりますが、これにより、基本がよく理解できます。 HAPRoxyのドキュメントはかなり詳細ですが、非常に包括的でもあります。

http://haproxy.1wt.eu/#docs

J

4
Jon Totham

サーバーとパブリックネットワークの間にリバースプロキシが必要です。 nginxはこのための人気のある選択肢であり、何を検索するかがわかれば、そこには多くの例があります( http://www.howtoforge.com/how-to-set-up-nginx-as-a- reverse-proxy-for-Apache2-on-ubuntu-12.04 は、「nginxリバースプロキシ」の検索で最初に返されたものの1つです)。

プロキシの内部にある異なるサーバーによって提供されるドメイン/ディレクトリについては、プロキシマシンが異なるローカルロケーションから提供する場合と同じように、各仮想ホストまたはディレクトリを定義しますが、代わりに関連するオプション。

nginxは唯一のオプションではありません。多くのWebサーバー(適切なモジュールを備えたApacheを含む)はこの方法で動作できます。 nginxは高速で軽量であるため人気のある選択肢ですが、他の機能も必要な場合は、買い物をして最良の選択をしてください。

いずれかのサイトでSSLを使用する場合は、関連する証明書を使用してプロキシを構成する必要があります。また、プロセスを通過するために複数のSSLサイトが必要な場合は、SNIを処理するようにWebサーバーを構成する必要があります。効率を上げるために、プロキシが非SSL httpifによって内部サーバーと通信するのが通常です。それらの間のネットワークは信頼されています。

4
David Spillett