web-dev-qa-db-ja.com

john.example.comなどのユーザーごとにカスタムサブドメインを追加する方法

企業がアプリケーションを使用するために登録するB2B Webアプリケーションに取り組んでいます。 www.example.comを使用してアプリケーションにアクセスするとします。

シナリオは次のとおりです。

  1. 「POTATO」という会社の誰かがwww.example.comに来て登録します。
  2. ユーザー名「POTATO」でログインします

URLをwww.example.comからwww.potato.example.comに変更します。

www.example.comに登録されている会社は数千社あります。私はNode.js開発者であり、プロキシとしてNginxを使用しています。

これを達成するには何をしなければなりませんか?

まず、サブドメインの先頭からwwwを削除することをお勧めします。これは人々を混乱させます。本当に必要な場合はwww.foo.comを使用できますが、potato.foo.com

Node.jsについてはわかりませんが、cpanelを使用している場合、サブドメインを作成するクラスがあります。

最初にPHP githubのXMLAPIクラス を取得してから、例に従ってください。これを使用して、その場でサブドメインを作成する方法を次に示します。まったく必要ありません。

$xmlapi->api1_query('accountname','SubDomain','addsubdomain',array('potato','foo.com',0,0,'/public_html')); 
1
Steve

はい。私がWebホストだった頃、ライブラリ、コントロールパネル、およびコーダーの生活を楽にするものがあまりなかったと言って始めたいと思います。 Node.jsやNginxは、当時これらのものが存在しなかったため、私にはわかりません。スープからナッツまでコードを書く必要がありました。そして、あなたはこれらの用語で考える必要があるかもしれません。もちろん、今日はあなたのためのツールがあり、それらを使用する必要がありますが、本当に高価な製品以外にあなたのための完全なソリューションはありませんので、いくつかの研究を行う必要があります。私の経験に基づいていくつかの洞察を提供しますが、それはApache、Bind、MySQL、Perlなどの観点からのものになりますが、実際にはこれらをあまり参照しません。それは単なる別の視点です。

私がウェブホストだった頃、顧客はサインアップしてアカウントを作成していました。そこから、アカウントはデータベースに作成され、そこにベースの顧客データとその他のメタデータが保存されます。ユーザーはログインする必要があります。そこから、顧客はドメイン名などの特定の情報を入力します。あなたの場合、あなたの例のように彼らがどのように知られることを望むかもしれません。ここでは、Javaが特に役立つと思います。このコードは、ビジネスルールと脆弱性を公開するため、公開したくありません。私はあなたのJSがデータベースに書き込み、データベースが利用可能なトリガーを持っていると仮定します。また、データベーストリガーはJavaまたは他の言語を外部で使用できると想定しています。ほとんどのデータベースでは、トリガーで外部コードを起動できます。特にプログラムで構成を行う前に、必要なデータ要素を把握する必要があります。

私の場合、ドメイン名は作成されますが、あなたの場合は、サブドメインを作成しています。準備できるように、両方について説明します。

かつては、2つの別々のネットワークに2つのDNSサーバーがあるドメインのSOA(権限のステートメント)になるために必要でした。これは今日必須ではありませんが、それでも良い考えです。 2台のDNSサーバーにネットワークソリューションを使用しました。2台のDNSサーバーに対応する堅牢なネットワークで、ローカルネットワークに単一のDNSを作成しました。 2つのネットワーク上のDNSサーバーのペアがそれぞれ1つあるプライマリサーバー。ドメインSOAレコードをローカルDNSに作成しました。このレコードは各ネットワークのプライマリDNSにレコードを「プッシュ」し、セカンダリDNSはプライマリからプルします。複雑に聞こえますか?そうではない。パブリックDNSサーバーがレコードを取得する1つのローカルサーバーにレコードを作成しました。これにより、コーディングがはるかに簡単になりました。

最後の段落のポイントは、信頼できるDNSサーバーにアクセスできることです。これは他の場所でホストされる必要があり、コードでアクセスできるAPIまたはツールがある限り、レジストラになる可能性があります。ドメイン名の解決を必要とするDNSでドメインSOAをホストすることは絶対にしないでください。たとえば、ns1.example.comは、example.comのSOAであってはなりません。また、WebサーバーでDNSを使用しません。これは、セキュリティとパフォーマンス上の理由によるものです。

ドメインはどこかでホストされている可能性が高いため、できればレジストラでAPIが利用可能かどうかを確認してください。そうでない場合は、これを行うことができるレジストラまたはDNSホストを探します。これにより、サブドメインを動的に作成できます。ドメイン名はインターネット全体に伝播する必要がありますが、サブドメインはそうではありません。例外は、テレコムがDNSデータをキャッシュする場合です。

Webホストとして、Webサイト自体のプライマリサーバーとセカンダリサーバーがあります。この理由は、フェールオーバーと負荷分散です。あなたの場合、作成するアカウントが多いほど、フェールオーバーロードバランシングが必要になります。 Webサーバーには、ホストできるアカウントの数、構成済みサイトの数の制限、またはパフォーマンスの制限があります。あなたが直面する制限を知りたいでしょう。これは、フェールオーバーと負荷分散がなくても複数のサーバーを意味する場合があります。

Apacheでは、サイトの作成は簡単なプロセスです。/sites-available /ディレクトリ内に設定ファイルをプログラムで作成するだけです。ドメイン名example.comを使用して、ファイルexample.com.confを作成します。サブドメインでは、ファイルuser.example.com.confを作成します。このファイル内に必要な構成データをプログラムで書き込みます。そこから、単に/ sites-available /から/ sites-enabled /にファイルをコピーし、Webサーバーを再起動します。 Nginxについては、何が必要なのかを説明できませんでしたが、プロセスは多少似ているはずです。再起動は停止であり、潜在的に失敗する可能性があることを考慮する必要があります。これは可能な限り軽減する必要がありますが、避けられない場合があります。

これを行うにはいくつかの方法があります。直接ファイルアクセス、APIの作成、または構成を作成する各サーバーに存在するcronスタイルのタスクの作成。シンプルなAPIをお勧めします。

ここで、逆を行う必要があります。 Webサーバー上のアカウント、DNSレコード、およびサイトを削除するだけでなく、プロセスが機能し、サイトが最適に機能していることを確認する必要があることに注意してください。アカウントの作成に使用するプロセスは、アカウントの削除に使用するプロセスとほぼ同じです。単にビジネスロジックを逆にするだけです。難しくありません。ただし、サブドメインが使用可能であることを確認するかどうかは、他に何をしているかによって異なります。私はこれであなたを助けることができません。ただし、単純なHTTPフェッチを使用して、期待どおりの結果が得られるかどうかを確認できます。簡単な面では、コードでこれを行う必要がありますが、wgetでもできます。

データベースを使用して、動作するはずのプロセスが完了し、確認されていることを確認し、依存関係を管理することもできます。同様に、これを使用してユーザーとやり取りすることもできます。とんでもないことは現実的ではないかもしれませんが、ステータスページは正常に機能するはずです。

最後に一つだけ。合理的に可能な限りサーバーをセグメント化および分離する必要があります。これらのサーバーをホストしている場合、セキュリティのレベルを上げるためにファイアウォールやセグメント化されたネットワークがないため、これは非常に重要になります。ホスティングは、お尻を窓からぶら下げるようなものです。窓からお尻を吊るす場合は、それを覆います。サーバーには、できるだけ多くのセキュリティとシンプルさを実装する必要があります。 API、データベース、コード、プロセスを公開しないでください。できる限り隔離し、途中で専門家に相談してください。

0
closetnoc