ルートドメインCNAMEの制限を克服する方法は?
-
19-08-2019 - |
質問
私たちは、お客様のために多くのWebアプリケーションをホストしています。明らかなように、彼らは自分のドメインを使用してそれらのアプリケーションを参照することを望んでおり、通常はhttp://www.customer1.example
またはhttp://customer1.example
を入力するユーザーはすべてWebアプリケーションにアクセスすることを望んでいます。
私たちが直面している状況は、近い将来にIPアドレスを変更できる柔軟性が必要だということです。また、顧客がドメインでAレコードの変更を行うことに依存したくありません。したがって、CNAME
レコードの使用は機能すると考えましたが、判明したように、customer1.mycompanydomain.example
レコードはルートドメインでは機能しません。
基本的に:
customer1.example IN CNAME customer1.mycompanydomain.example //this is invalid as the RFC
www.customer1.example IN CNAME customer1.mycompanydomain.example //this is valid and will work
A
または<=>レコードのIPアドレスを変更できるようにしたいので、顧客はこのレコードを追跡します。
DNSでは、次のようになります。
customer1.mycompanydomain.example IN A 192.0.2.1
アイデアはありますか
解決 8
sipwizとMrEvilに感謝します。ユーザーが入力したURLを解析し、その上部にwww
を貼り付けるPHPスクリプトを開発しました。 (たとえば、顧客が kiragiannis.com と入力すると、 www.kiragiannis.com )。そのため、顧客はルート(たとえば、Webリダイレクタが存在するcustomer1.com
をA
レコードに)を指し、次にCNAME
<=>が私たちが管理する実際の<=>レコードを指します。
将来の私たちに興味がある場合は、コードの下に。
<?php
$url = strtolower($_SERVER["HTTP_HOST"]);
if(strpos($url, "//") !== false) { // remove http://
$url = substr($url, strpos($url, "//") + 2);
}
$urlPagePath = "";
if(strpos($url, "/") !== false) { // store post-domain page path to append later
$urlPagePath = substr($url, strpos($url, "/"));
$url = substr($url, 0, strpos($url,"/"));
}
$urlLast = substr($url, strrpos($url, "."));
$url = substr($url, 0, strrpos($url, "."));
if(strpos($url, ".") !== false) { // get rid of subdomain(s)
$url = substr($url, strrpos($url, ".") + 1);
}
$url = "http://www." . $url . $urlLast . $urlPagePath;
header( "Location:{$url}");
?>
他のヒント
この質問が依然として頻繁に発生する理由は、あなたが言及したように、何らかの理由で誰かが重要だと思われる誰かが、RFCがサブドメインの前にドメイン名が無効であると述べているからです。ただし、RFCを注意深く読むと、これが正確に言っていることではないことがわかります。実際、 RFC 1912 の状態:
CNAMEを使いすぎないでください。ホストの名前を変更するときに使用しますが、それらを削除する計画(およびユーザーに通知します)。
一部のDNSホストは、カスタムレコードタイプを使用して、ゾーンの頂点(ネイキッドドメイン名のルートドメインレベル)でCNAMEのような機能を取得する方法を提供します。そのような記録には、たとえば次のようなものがあります。
- DNSimpleのエイリアス
- DNSのANAMEが簡単になりました
- easyDNSのANAME
- CloudFlareのCNAME
各プロバイダーのセットアップは同様です。CNAMEレコードの場合と同様に、apexドメインのALIASまたはANAMEエントリをexample.domain.comにポイントします。 DNSプロバイダーに応じて、空または@ Nameの値がゾーンの頂点を識別します。
ALIASまたはANAMEまたは@ example.domain.com。
DNSプロバイダーがそのようなレコードタイプをサポートしておらず、サポートしているレコードタイプに切り替えることができない場合は、サブドメインリダイレクトを使用する必要があります。それを行うには。
<!> quot;アマチュア管理者<!> quot;によってのみ行われているという声明には強く反対します。またはそのようなアイデア。簡単な<!> quot;名前とそのサービスは何をする必要がありますか?<!> quot;対処してから、それらの要望に応えるようにDNS設定を調整します。主なサービスがWebと電子メールの場合、CNAMEを完全に削除することが問題となる正当な理由はわかりません。結局、誰が@ domain.orgより@ subdomain.domain.orgを好むのでしょうか? <!> quot; www <!> quot;が必要な人プロトコル自体で既に設定されている場合ルートドメイン名の使用が無効になると仮定するのは非論理的です。
ルートレコードのCNAME化は、技術的にはRFCに反するものではありませんが、制限があるため、推奨されないプラクティスです。
通常、ルートレコードには複数のエントリがあります。ネームサーバー用に3つ、IPアドレス用に1つと言ってください。
RFCごと:
ノードにCNAME RRが存在する場合、他のデータは存在しません プレゼント;
そしてIETFの「一般的なDNSの運用および設定エラー」ドキュメント:
これは、しばしば経験の浅い管理者によって明白な試みとして試みられます ドメイン名もホストになることを許可する方法。ただし、DNS BINDなどのサーバーはCNAMEを参照し、他のサーバーの追加を拒否します その名前のリソース。他のレコードは許可されていないため CNAMEと共存すると、NSエントリは無視されます。したがって、すべての podunk.xxドメインのホストも無視されます!
参照:
- http://tools.ietf.org/html/rfc1912 セクション '2.4 CNAMEレコード'
- http://www.faqs.org/rfcs/rfc1034.html セクション'3.6.2。エイリアスと正規名 '
彼らがそれをどうやって逃げているのか、あるいはそれらがどのようなマイナスの副作用なのかわからないが、私はHover.comを使用して私のドメインのいくつかをホストし、最近私のドメインの頂点をそこにCNAME。彼らのDNS編集ツールはまったく文句を言わず、私のドメインは割り当てられたCNAMEを介して喜んで解決します。
このドメイン(実際のドメインはmydomain.comとして難読化されています)についてDigが表示するものは次のとおりです。
; <<>> DiG 9.8.3-P1 <<>> mydomain.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 2056
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;mydomain.com. IN A
;; ANSWER SECTION:
mydomain.com. 394 IN CNAME myapp.parseapp.com.
myapp.parseapp.com. 300 IN CNAME parseapp.com.
parseapp.com. 60 IN A 54.243.93.102
Sipwizは正しいです。これを正しく行う唯一の方法は、HTTPとDNSのハイブリッドアプローチです。私のレジストラはTucowsの再販業者であり、ルートドメインフォワーディングを無料の付加価値サービスとして提供しています。
ドメインがblah.comの場合、ドメインの転送先を尋ねられ、www.blah.comと入力します。 AレコードをApacheサーバーに割り当て、blah.comをDNS vhostとして自動的に追加します。仮想ホストは、適切なURLにリダイレクトするHTTP 302エラーで応答します。スクリプト/セットアップは簡単で、ローエンドで処理できます。そうでなければ、ハードウェアは廃棄されます。
例として次のコマンドを実行します。 curl -v eclecticengineers.com
customer1.mycompanydomain.com.localdomainを意味するとは思わないように、外部ドメインの末尾にピリオドを付ける必要があります。
変更するだけです:
customer1.com IN CNAME customer1.mycompanydomain.com
宛先
customer1.com IN CNAME customer1.mycompanydomain.com.
私の会社は、www.company.comではなくxyz.company.comですが、私たちがWebサイトをホストしている多くの顧客に対して同じことをしています。 xyz.company.comでAレコードを設定して、割り当てたIPアドレスを指すようにします。
IPアドレスの変更に対処する方法については、完璧な解決策はないと思います。いくつかのアイデアは次のとおりです。
-
NATまたはIPロードバランサーを使用して、顧客にIPアドレスを割り当てます。 WebサーバーのIPアドレスを変更する必要がある場合は、NATまたはロードバランサーを更新できます。
-
DNSホスティングサービスも提供し、顧客にドメインをホストしてもらい、Aレコードを更新できるようにします
-
顧客にAレコードを1つのメインWebサーバーに設定させ、各顧客のWebリクエストにHTTPリダイレクトを使用するようにします。
readytocloud.comはApache 2.2でホストされています。
非wwwサイトをApacheのwwwサイトにリダイレクトするには、はるかに簡単で効率的な方法があります。
次の書き換えルールをApacheの構成に追加します(仮想ホストの内部または外部。重要ではありません):
RewriteCond %{HTTP_HOST} ^readytocloud.com [NC]
RewriteRule ^/$ http://www.readytocloud.com/ [R=301,L]
または、www以外のサイトからwwwサイトへのURLの1対1マッピングが必要な場合は、次の書き換えルール:
RewriteCond %{HTTP_HOST} ^readytocloud.com [NC]
RewriteRule (.*) http://www.readytocloud.com$1 [R=301,L]
注意、これを機能させるにはmod_rewriteモジュールをロードする必要があります。幸いなことに、readytocloud.comはCentOSボックスで実行されており、デフォルトでmod_rewriteがロードされます。
Apache 2.2を実行するクライアントサーバーがあり、3,000未満のドメインとほぼ4,000のリダイレクトがありますが、サーバーの負荷は0.10-0.20前後です。