これは 標準的な質問 IP /ポートへのDNS /ホスト名解決についてです
ポート80でWebサーバーを実行し、ポート87で別のサーバーを実行しています。www.example.comがポート87に移動するようにDNSを使用したいのですが、DNSだけを使用してこれを実現するにはどうすればよいですか?
サーバーのサービスを標準以外のポートで実行しています。クライアントがこの非標準ポートに自動的に接続するようにするにはどうすればよいですか? DNSを使用できますか? DNSがIPとポートを示す可能性があるアプリケーション固有のサポートはありますか?
一部のアプリケーションプロトコルは、ホスト名認識を特別にサポートしており、この情報に基づいて特別なアクションを実行できますか?これらのいくつかをカバーするサーバー障害に関する他の質問はありますか?
Commandeering:
この質問は、元々同じサーバーでIISとApacheを実行することについて尋ねていましたが、同じ概念をクライアントから接続を受信するすべてのサーバーソフトウェアに適用できます。以下の回答は技術的な問題について説明しています。 DNSおよびアプリケーションプロトコルサポートを使用して、クライアントが接続するポート番号を割り当てるソリューション。
DNSを使用してポートをポイントすることはできません(クライアントがSRVレコードをサポートしている場合を除いて、ほとんどはサポートしていません)。
これを行うには、いくつかのフロントエンドメソッドを配置する必要があります。通常、フロントエンドWebサーバーまたは専用のプロキシソフトウェアを使用して、ヘッダーで要求されているサーバーの名前に基づいて、ポート80からポート!80に接続を転送します。一部のファイアウォールもホストヘッダーに基づいて転送できます。
一部のクライアントは、指定されたサービスのサーバーのホスト名とポート番号を示すSRVレコードの検索をサポートします(つまり、ユーザーが「example.com」を指定すると、クライアントはSRVレコードを検索し、ポート「255で「server101.example.com」を取得します";次に接続します)。一部のクライアントは、必要のない場所でもこれを実装します(たとえば、最後のスマートフォンは、新しい電子メールアカウントをセットアップするときにSRVレコードを検索します)。
残念ながらSRVレコードのサポートは非常にまれです。少数の注目に値するプロトコルのみがサポートを義務付けており(Jabber/XMPP、Kerberos、LDAP、SIP)、必須の場合でもすべてのクライアントがサポートするわけではありません。
ブラウザに http://www.domain.com と入力すると、HTTPポートが80であることがわかります。したがって、www.domain.comをポートに直接指定する方法はありません。 87 IISのそのポートでサービスがすでに実行されている場合。
そうは言っても、いくつかの「回避策」があります。
サムは正しい、ポートに関してはDNSは不可知論だ。あらゆる種類のポートのリダイレクトは、そのポートで実行されているサービスによって行われます。したがって、これを実現するためにIISを使用して何かを行う必要があります。ポート80のままにするしかありません。
また、Apacheでmod_proxyを使用して状況を回避しました。IISでこれを行う方法があるかどうかはわかりません。
ドメイン名は、ポートではなくIPアドレスにのみ関連付けることができます。
ほとんどのWebサーバー(例: (Apache、IISなど))Webリクエストにリクエスト自体のドメインを識別するHost-Headerフィールドが含まれているという事実を利用して、同じIPアドレスで2つのドメインをホストできるようにします。
あなたが使用しているウェブサーバーが何であるかを言うと、私は人々があなたが望むようにあなたのサーバーをセットアップするために関連するドキュメントをあなたに指摘できると確信しています
技術的には RFC 2782 で定義されているDNSサーバーで SRVレコード を使用して、ブラウザに(サブ)ドメインのどのポートでhttpを処理するかをブラウザに指示できます。
_http._tcp.www.example.com. IN SRV 0 5 80 www.example.com.
_http._tcp.www2.example.com. IN SRV 0 5 87 www.example.com.
これは、特にSRVレコードの使用がプロトコル仕様ですでに定義されている場合、多くのプロトコル/サービスでうまく機能します。
ただし、この " Hall of Shame "のように、ほとんどのWebブラウザー/クライアントはこれをサポートしていません(HTTPの場合)。 why-do-browsers-not-use-srv-records も参照してください。
取り決めは基本的に、SRVはhttpプロトコルに必須として含まれていないため、それを実装するすべてのブラウザーは、URLを解決しないブラウザーとは異なる方法でURLを解決します。
したがって、これはオプションのロードバランシングとしてのみ使用する必要があります。コンテンツに関してどのサーバーを選択するかは関係ありません。 「オプション」。少数のクライアントだけがこれを実装する場合、負荷の大部分を分散しないため。
非標準ポートでany(TBT)サービスを使用し、URIにポートを書き込まないために、-everybodyはRFC 2782で定義されているSRVレコードを使用できます。
_http._tcp.www.example.com. IN SRV 0 5 87 www.example.com.
ゾーン内の他のすべてのhttpホストは、デフォルトのポート80で引き続き提供されます
DNSには特定のポートにリダイレクトする機能はありません。すべてのDNSは名前のIPアドレス解決であり、その逆も同様です。
NO-IP などの動的IP DNSプロバイダーなどの一部のサービスは、ホームDNSサービスでIPのラウンドブロッキングを取得するのと同じようなことを行うのに役立つサービスを提供します。
最も簡単な方法は、リバースプロキシを使用してWebプロキシとして設定することです。 nginx
またはApache
を構成できます。基本的には以前と同じ問題があり、そのような構成を簡単な方法で実現するツールを作成しました。エルゴ: https://github.com/cristianoliveira/ergo
私はこれを使用しており、基本的には魅力のように機能します:)
同じホストに2つのWebサーバーを配備する1つの方法は、2つのWebサーバーを2つの異なるIPv6アドレスのポート80で待機させることです。 IPv6では、インターフェースに2つのアドレスを割り当てることができると正式に規定されており、アドレスが不足することなくこれを実行できる十分なIPv6アドレスがあります。
これは将来の保証であり、2つのドメインはそれぞれ異なるIPアドレスを指すAAAAレコードを持つことができるため、ドメインは異なるWebサーバーに到達します。
IPv4アドレスが1つしかない場合は、IPv4アドレスのポート80を使用してリバースプロキシを実行できます。このようにして、IPv4のみのクライアントは両方のWebサーバーにアクセスできます。一部のWebサーバーがリバースプロキシと同じホスト上にあり、一部のWebサーバーが他のホスト上にある場合でも、リバースプロキシアプローチは機能します。
このような設定ではexample.org
はアドレスを持つことができます192.0.2.1
および2001:db8::1
中example.net
にはアドレスがあります192.0.2.1
および2001:db8::2
。