11

ユーザーが自分のアカウントを作成してサービスを使用できる webapp があります。ここで、app.customer1web.com points_to myservice.com がユーザー ID customer1 であるカスタム ドメイン機能を彼らに提供したいと思います。彼がカスタム ドメインをセットアップすると、私のサービスが彼のマシンで実行されているように見えます。ブロガー、wp.com、tumblr などの多くのサービスがこの機能を提供しています。

それ、どうやったら出来るの?Java を使用して Web アプリケーションを作成しています。リクエストが届いたときにドメイン名をユーザー ID にマップするにはどうすればよいですか?

4

4 に答える 4

19

リクエストが届いたときにドメイン名をユーザー ID にマップするにはどうすればよいですか?

明らかに、その情報をどこかに、おそらくデータベースに保存する必要があります。

  1. domains列を含むデータベース テーブルを追加します。

    • 顧客ID
    • 名前
    • アクティブ (1 または NULL)
    • チャレンジ

    (name, active) の一意のキーを追加して、ドメイン名が 1 回だけマップされるようにします。

  2. 顧客がドメインを追加しようとすると、active=NULL の行を追加し、チャレンジをランダムな文字列に設定します。

    顧客にランダムな文字列を見せて、ドメインの所有権を確認するために、それを使用してウェブページをサイトに掲載するか、それを使用してダミーの DNS レコードを作成するように依頼します (これが Google Apps の方法です)。

    管理者の連絡先に電子メールを送信するか、その他の方法で所有権を確認できます。

  3. 顧客が、ステップ 2 で指示したことを実行したと言ったら、それを確認し、active=1、challenge=NULL に設定します。

    ドメインが以前に他の顧客に対してアクティブだった場合は、それらのレコードを削除するか、アクティブ = 0 に設定します。

  4. ドメインの CNAME レコードを追加して、ドメインに転送するよう顧客に依頼しますhosted.myservice.com(例: Google はghs.google.comGoogle Apps に使用します)。

  5. リクエストが来たら実行する

    SELECT customerId FROM domains WHERE name=:requestDomain AND active=1
    

より良い方法は、カスタム ドメインに加えて<customername>.myservice.com、の形式のドメインを顧客に自動的に提供することです。これにより、次の 2 つの利点が得られます。

  • 独自のドメインを使用したくない顧客は、会社のロゴなどでログイン ページをカスタマイズできます。

  • カスタム ドメインの場合は<customername>.myservice.com、一般的な ではなく に転送するよう顧客に依頼できますhosted.myservice.com

    これにより、顧客側で変更を依頼することなく、複数のサーバー間で顧客を水平に分割できます。たとえば、顧客が自分のアカウントを EU でホストするか米国でホストするかを選択するオプションを提供できます。変更したら、データを転送して更新するだけ<customername>.myservice.comです。カスタム ドメインは自動的に機能します。

これを行うには、ワイルドカード DNS レコードを設定する*.myservice.com必要があります (後者の機能も必要な場合を除きます。後者の場合は、個々のレコードを管理する必要があります)。

于 2009-12-13T11:25:38.263 に答える
2

使用できる解決策の 1 つは、アプリケーションにワイルドカード DNS レコードを設定し、アプリケーション自体に RequestURI をチェックさせて、ユーザーがアクセスしているホスト名を確認することです。

これが非常に漠然とした答えであることは承知していますが、ホスト名をチェックする単一の関数を使用してワイルドカード レコードを設定するのが最善の策です。これにより、顧客がサインアップするたびに DNS レコードを設定する必要がなくなり、アプリケーションに新しい機能を追加するなど、他のことを行う時間が増えます。

于 2009-12-11T18:42:15.163 に答える
0

あなたがやりたいことを本当に理解しているかどうかはよくわかりませんが、可能な解決策を提供しようとします(少なくとも問題のJava部分について)。

1 つの可能性は、すべての要求が 1 つのサーブレット (web.xml) によって処理されるようにアプリケーション サーバーをセットアップすることです。このサーブレットは、リクエスト URL ( HttpServletRequest.getRequestURI )を見つけて、ユーザー名を抽出できます。次に、ユーザーについて知り、この情報を使用して何をしたいかを知ることができます。

あなたがやりたいことには、多くの DNS が関係していることに注意してください! (少なくとも私が理解している限りでは。)

于 2009-12-10T14:31:12.757 に答える