2013-08-20 5 views
6

私のサブドメイン(pagename.myapp.com)または独自のドメイン(pagename.com)を使用してユーザーが自分のウェブサイトを作成できるようにするアプリケーション(RoR + Heroku)を開発中です。 この重要な点は、このオプションが私のビジネスの鍵であることです。サブドメインは無料のプランであり、カスタムドメインは有料のドメインです。だから、私は各ユーザーのカスタムドメインを格納し、このページがアクティブである(存在し、割り当てを支払っている)かどうかをチェックするテーブルを持っています。マルチテナントウェブアプリケーションのカスタムドメイン

そのためには、ユーザーが自分のドメインを自分のサーバーにポイントする機能をユーザーに与える必要があります。 HerokuはDNS A-Recordsの使用を推奨していないことがわかっています。

また、私のインフラストラクチャ(Heroku to AWS)を将来的にすべてのユーザにDNSゾーンの変更を依頼することなく、この機能を可能な限り抽象化したいと考えています。これを考慮すると、私は、このオプションの所有権を与えるEC2プロキシ(AWS Elastic IPを使用)のようなものが最適な選択肢になると考えています。このプロキシはproxy.myapp.comにリダイレクトする必要があり、アプリレベルでリクエストを解決します。

私はそれに関する明確な情報が見つからなかったため、このhypotesisが最良の解決策であるかどうか、およびプロキシの設定方法(プロキシの種類は?Nginxかもしれませんか?

この「共通」機能を解決するための推奨事項やベストプラクティスについてお聞きしたいと思います。

ありがとうございました

答えて

3

あなたがしたいことは、かなり簡単に実装することです。あなたの前提は、プロキシの設定に関して正しいです。 Nginxまたはhaproxyは両方ともこれにぴったりです(個人的にはhaproxyを使用します)。エンドWebアプリケーションが正しくないリンクを生成することがありますプロキシサーバーのホストヘッダーを変更

  1. :ここではあなたががに実行される落とし穴の一部です。あなたはこの問題を解決するために、相対パスを使用することができますが、それは、Webアプリケーションの開発者は、彼らがで実行されていること、環境を意識することが必要です。

    1. ユーザーがwww.example.comに接続(プロキシサーバ)
    2. プロキシサーバーはwww.realdomain.com(ウェブアプリ)に接続します
    3. ウェブアプリにはショッピングカートのリンクがあります。 www.realdomain.com/shoppingcart
    4. エンドユーザーがリンクをクリックしてもリンクが代わりにwww.example.com/shoppingcart
  2. ホスト演技のコストのwww.realdomain.com/shoppingcartされますプロキシサーバーとして使用します。これは本当に素早く制御から逸脱することができます。たとえば、冗長性が必要かどうか、もしそうなら、それをどのように実装する予定ですか? ssl終了を計画していますか?その場合は、追加の負荷に対応するためにCPU数を増やす必要があります。プロキシからherokuへの安全な接続をしたいですか?そうした場合は、CPU数を増やす必要があります。同時接続の数に応じて、追加のRAMを追加する必要があります。

  3. また、Herokuも定期的にロードバランサを変更します。プロキシサービスがherokuインスタンスのIPアドレスを60秒ごとに再ロードして更新する必要があるため、これは重要です。私の経験では、1日に1〜2回変更することができますが、DNSエントリには60秒のTTLがあります。つまり、60秒ごとに設定を更新できることを確認する必要があります。

私の会社は、これとほぼ同じようなことを今一年間行っています。私たちはhaproxyを使い、設定を定期的にリロードします。私たちは、エンドユーザーに停電や中断があったことはありません。 Nginxはまた、非常に良い製品です。それはDNSキャッシングを内蔵しているので、そのルートに行く場合は、DNSキャッシュのTTLが60秒になるように正しく設定する必要があります。

0

多くのお客様がドメインアペックスであなたのアプリを使用したいですか?例えば。 example.comではなくapp.example.cpm?そうでない場合は、myapp.herokuapp.comへのCNAMEをproxy.myapp.comにCNAMEすることをお勧めします。その後、お客様の介入なしにproxy.myapp.comを更新することができます。

apexまたはAレコードのサポートが必要な場合は、HerokuアプリケーションのリバースプロキシとしてNginxを設定することをお勧めします。クライアントドメインに対してHTTPSサポートが必要な場合は、プロキシで何らかの種類の証明書管理を行う必要があることに注意してください。

+0

英雄では、CNAMEは機能しません。彼らは、仮想ホストからのルーティングに基づいています。彼らはあなた自身のDNS名を使用することを許可しますが、それはOPが求めているものです。あなた自身のDNS名を使用するために、彼らは余分な料金を請求します。 – dtorgo

関連する問題