HubSpotでリバースプロキシーを使用する
-
Content Hub
- Enterprise
HubSpotのCMS上に構築されたウェブサイトは自動的に、数百のローカルPOP(ポイント オブ プレゼンス)を持つHubSpotのグローバルなCDN(コンテンツ配信ネットワーク)を使用します。ただしお客さまの環境によっては、既存のCDNや複雑なルーティングルールをお持ちで、HubSpotの標準搭載CDNでは維持できない場合があります。
注:
- HubSpotのサポートチームは、このサービスに関するサポートを提供していません。お客さまはHubSpotへのリバースプロキシーの実装について、テクニカルコンサルタントによる有料サポートを利用するか、コミュニティーフォーラムで他のユーザーからサポートを受けることができます。
- このガイドでは、既存のウェブサイトまたはアプリが、リバースプロキシーに対応したCDNまたはウェブサービスを使用することを前提としています。
注:HubSpotの標準搭載CDNとその他の全てのサービスには、自動フェールオーバーとリカバリー機能を備えた複数のインスタンスがあります。リバースプロキシーを実装する場合は、負荷分散機能を備えた複数のインスタンスを使用することを強くお勧めします。全ての要求が単一プロキシーノードを介してルーティングされている場合、要求がレート制限プロトコルをトリップし、ブラウザー内のJavaScriptチャレンジが完了するまでは要求に対して429
または403
レスポンスが返される可能性があります。
独自のCDNまたはリバースプロキシーを使用すると、より多くの設定オプションを利用できる可能性がありますが、これにはかなりの運用知識とメンテナンスが必要となります。以下は、この方法を採用する前に検討すべき事項のリストです。
機能 | HubSpotのCDN | カスタムソリューション |
---|---|---|
帯域幅 | 含まれる | 追加費用あり |
SSL | 含まれる:自動セットアップ | 追加費用あり:手動セットアップ |
グローバルCDN | 含まれる | ? |
自動キャッシュ管理 | 含まれる | いいえ |
不正使用防止保護 | 含まれる | 顧客所有 |
24時間体制の監視 | 含まれる | 顧客所有 |
サポート | 含まれる | 顧客所有 |
IPv6 | 含まれる | ? |
HTTP/2 | 含まれる | ? |
レイテンシー | 最適 | 追加のネットワークホップが必要 |
さらに、サイトのサブパスをHubSpotにプロキシーする場合、手動で追加しない限り、メインのsitemap.xmlにはHubSpotのページが含まれません。
カスタム リバース プロキシーを追加した場合、ウェブサイトのユーザーがサービスに対して要求を行うと、HubSpotのCDNにプロキシーされ、新たなネットワークホップが導入されることになります。
プロキシーの設定作業を開始するには、まずAmazon CloudFrontのようなCDNやnginxサーバーなど外部環境でプロキシーを設定します。
注:現在のところ、Cloudflareはリバースプロキシーの設定に使用できません。
複数のIPアドレスからHubSpot CNAMEオリジンに送られる要求が、プロキシーからのトラフィックによってローテーションされるようにするために、常にプロキシーを負荷分散された環境に実装する必要があります。
プロキシーに必要なCNAMEの形式は<HubID>.<suffix>
です。ここでのサフィックスはHubIDの末尾2桁によって決まります。以下の表で、HubIDの末尾2桁とサフィックスの対応をご確認ください。
HubIDの末尾 | サフィックス |
---|---|
00-10 | sites-proxy.hscoscdn00.net |
11-19 | sites-proxy.hscoscdn10.net |
20-29 | sites-proxy.hscoscdn20.net |
30-39 | sites-proxy.hscoscdn30.net |
40-49 | sites-proxy.hscoscdn40.net |
50-59 | sites-proxy.hscoscdn00.net |
60-69 | sites-proxy.hscoscdn10.net |
70-79 | sites-proxy.hscoscdn20.net |
80-89 | sites-proxy.hscoscdn30.net |
90-99 | sites-proxy.hscoscdn40.net |
例えばHubIDが123456
の場合、正しいオリジンCNAMEは123456.sites-proxy.hscoscdn00.net
になります。
以下は、リバースプロキシーの一般的な設定手順と、Amazon CloudFrontおよびnginx向けの具体的な手順です。
一般的には、オリジンCNAMEを使用して要求を転送するようにプロキシーを設定し、以下の設定を追加することができます。
- HubSpotからのパスに対してキャッシュを実行しないようにプロキシーを設定します。HubSpotがCDNのキャッシュの内容を自動的に管理するため、キャッシュの内容が公開されるとページが自動的に更新されます。サービスが応答をキャッシュする場合、ページは数時間または数日更新されない可能性があることにご注意ください。
- 元の要求者のクライアントIPアドレスを、
X-Forwarded-For
ヘッダーに追加するか、このヘッダーの前に付加します。これは、クライアントをそれぞれ区別するために必要です。CloudFrontなどの多くのサービスでは、これらのヘッダーが自動的に維持されます。 - 所在地に基づいてパーソナライズされたコンテンツが機能するようにするため、静的ヘッダー
X-HubSpot-Trust-Forwarded-For: true
を渡します。これによりX-Forwarded-For
ヘッダーを信頼しますが、このヘッダーは全てのアップストリームプロキシーで更新されていない可能性があります。 - 宛先ドメインの値が指定された
X-HS-Public-Host
ヘッダーを渡します。 - 全てのHTTPメソッドを許可します。
- プロキシードメインにSSL証明書が発行され、インストールされていることを確認します。
- 全てのクエリー文字列を転送します。
- その他全てのリクエストヘッダーとレスポンスヘッダーをそのまま転送します(Cookieを含む)。
- ドメイン下の全てのパスをHubSpotにプロキシーすることが理想的です。そうでない場合は、ドメインからアセットを適切に読み込むために、パス
/_hcms/*
、/hs/*
、/hubfs/*
、/hs-fs/*
、/cs/c/*
、および/e3t/*
をプロキシーする必要があります。
Amazon CloudFrontでリバースプロキシーを設定するには、新しい代替ドメイン名を使用して新しいディストリビューションを作成し、新しいオリジンを作成してから、HubSpotコンテンツがホスティングされているページパスのキャッシュ動作を作成する必要があります。ディストリビューションの利用方法について詳しくは、AWS側の資料を参照してください。
- Amazon CloudFrontアカウントにログインします。
- 左側のサイドバーで[Distributions(ディストリビューション)]に移動します。
- 新規にセットアップする場合は、最初に[Create Distribution(ディストリビューションの作成)]をクリックして新しいディストリビューションを作成する必要があります。または、既存のディストリビューションを編集するか、オリジンと動作のセットアップ手順に進むことができます。
- [General(一般)]タブで[Edit(編集)]をクリックします。
- [代替ドメイン名(CNAMEs)]フィールドに、サブドメインを含むドメインを追加します。これは、HubSpotに追加したドメインと一致している必要があります。
- [Yes, Edit(はい、編集します)]をクリックして変更を確定します。[General(一般)]タブが再び表示され、[代替ドメイン名 (CNAMEs)]の横にドメインがリストされます。
- また、[Domain Name(ドメイン名)]フィールドの値を使用してDNSプロバイダーに新しいCNAMEレコードを作成する必要があります。この値は
<value>.cloudfront.net
のようになります。
- 作成したディストリビューションで、リバースプロキシーをセットアップしているドメインを代替ドメイン名として追加します。
- 次に、新しいオリジンを設定します。
- [Origin domain(オリジンドメイン)]フィールドに上の表の
<HubID>.<suffix>
CNAME値を入力します。この値は123.sites-proxy.hscoscdn20.net
のようになります。 - [Add custom header(カスタムヘッダーの追加)]の下の[Add header(ヘッダーの追加)]をクリックします。次に、以下のヘッダー詳細を追加します。
- 所在地に基づいてパーソナライズされたコンテンツが機能するようにするため、エンドユーザーのIPの値を指定した
X-Client-IP
を渡すか(推奨される方法)、または静的ヘッダーX-HubSpot-Trust-Forwarded-For: true
を渡します。後者の方法ではX-Forwarded-Forヘッダーが信頼されますが、このヘッダーは全てのアップストリームプロキシーで更新されていない可能性があります。 - 宛先ドメインの値が指定された
X-HS-Public-Host
ヘッダーを渡します。
- [Origin domain(オリジンドメイン)]フィールドに上の表の
- [Origins and Origin Groups(オリジンとオリジングループ)]タブをクリックします。
- [Create Origin(オリジンの作成)]をクリックして、オリジンをセットアップします。
- [Create(作成)]をクリックして変更を保存します。
- 次に、HubSpotコンテンツをホスティングするページパスのキャッシュ動作をセットアップします。
- [Path pattern(パスパターン)]フィールドに、HubSpotコンテンツがホスティングされるページのURLパスを入力します。これは、特定のページのパス、またはワイルドカードなどの柔軟なURLにすることができます。詳しくはパスパターンをご確認ください。
- [Origin and Origin Groups(オリジンとオリジングループ)]フィールドをクリックし、先ほど作成したオリジンを選択します。
- [Behaviors(動作)]タブをクリックします。
- [Create Behavior(動作の作成)]をクリックします。
- キャッシュの動作をセットアップします。
- [Save changes(変更を保存)]をクリックします。
ディストリビューション、オリジン、動作を設定すると、指定されたパスで作成するHubSpotページでリバースプロキシーが使用できるようになります。HubSpotでドメインを設定する手順に進みます。
注:nginxを使用したリバースプロキシーのセットアップについて詳しくは、nginx側の資料(英語)をご確認ください。特に、アップストリームトラフィックの保護、proxy_ssl、$proxy_protocol_addrなどの設定についてのドキュメントをご参照いただけます。
nginxを使用する場合、トラフィックをルーティングするために必要なヘッダーと設定がいくつかあります。以下は、始点として使用できるnginxロケーション設定ファイルのサンプルスニペットです。
上記のコードでは、プロキシー接続とコンテンツ ホスト ドメインが異なることにご注意ください。一方はHubSpotが提供するCNAMEですが、もう片方はコンテンツの提供元であり、HubSpotに追加するドメインと一致するドメインです。この違いは、プロキシーとHubSpotのサーバー間の安全な接続を確立するSNI(サーバー名表示)接続プロセスによるものです。
nginxプロキシーでこれを有効にするには、上記のコードにもある、以下の設定を含めてください。
これらの設定は、オリジンドメインがホストとは異なるため、SNI SSL接続ハンドシェイクでサーバードメイン名を送信するようnginxに指示します。
プロキシーを設定したら、次にドメインをHubSpotに追加します。標準的なドメイン接続プロセスと違い、HubSpotにドメインを完全に接続しない点にご注意ください。接続プロセスを開始してドメインをHubSpotコンテンツ公開用にしますが、DNSプロバイダーでCNAMEレコードを作成しません。このプロセスの終了時には、プロキシーはドメインに対する全ての要求を受信し、HubSpotへの特定のパスとその他のコンテンツホストへの他のパスをプロキシーすることを選択できます。
例えば「www.website.com」上のパスに対してリバースプロキシーをセットアップする場合には、HubSpotドメインに「www.website.com」を追加する必要があります。プロキシーは「www.website.com」に対する全ての要求を受信し、HubSpotへの特定のパスと他のコンテンツホストへの他のパスをプロキシーすることを選択できます。これにより、「www.website.com/pricing」など、そのドメイン上のパスにHubSpotを介してコンテンツを公開できます。
ドメインをHubSpotに追加するには、次の手順に従います。
- HubSpotのアカウントで、ドメイン設定に移動します。
- [ドメインを接続]をクリックします。
- [プライマリー]または[セカンダリー]を選択します。この機能では、リダイレクトドメインおよびEメール送信ドメインはサポートされていません。
- [接続]をクリックします。
- ドメインでホスティングするコンテンツタイプを選択し、[次へ]をクリックします。
- ブランドドメインを入力します。例えば「www.website.com」の場合、website.comを入力します。
注:このドメインは、リバースプロキシーを介して要求されているドメインと一致している必要があります。
- コンテンツをホスティングするサブドメインを入力します。サブドメインは、外部でホスティングされているドメインのサブドメインと一致している必要があります。続いて、[次へ]をクリックします。
- 入力したドメインを確認し、[次へ]をクリックします。
- ドメインがGoDaddyでホスティングされている場合は、GoDaddy接続モーダルが表示されたら、[いいえ、手動でセットアップします]をクリックします。
- 次に、HubSpotがドメインの所有権の確認とコンテンツ公開の許可ができるようにするため、ドメインを確認します。
- ドメインが現在SSL証明書を使用して外部でホスティングされていない場合は、HubSpotサポートに連絡して、CNAMEレコードとTXTレコードを作成するために必要な値を取得します。
- 現在、有効なSSL証明書を使用してドメインが外部でホスティングされている場合は、次の手順に従います。
- 「このドメインにはすでに別のプロバイダーからのSSL認証があるようです。」というアラートがHubSpotに表示されます。
- このアラートで[事前プロビジョニング]をクリックして、ホスト名の認証に必要なCNAMEの値とTXTの値を取得します。
- DNSプロバイダーで、指定された値を使用してレコードを作成します。
- HubSpotで[確認]をクリックします。HubSpotがDNSプロバイダーに加えられた変更を認識し、ホスト名を確認するまでに最大4時間かかることがあります。
- ドメインを確認したら、左下の[ドメインに戻る]をクリックして接続ウィザードを終了します。
- ドメインのリストで、新しいドメインにカーソルを合わせ、[編集]をクリックして[公開の準備完了として設定]を選択します。ドメインマネージャーで、ドメインのステータスが[接続されていません]から[公開の準備完了]に更新されます。
これで、HubSpotでドメインがプロキシーできるように適切に設定されました。ドメインへの要求が正常に行われると、ドメインのステータスが[公開の準備完了]から[接続済み]に更新されます。これには数週間かかる場合があります。
設定を確認するには、次のURLにアクセスします。https://[yourFullDomain]/_hcms/diagnostics
以下の内容を確認します。
- 現在の時刻値が読み込みごとに変化する。これにより、ページがキャッシュされていないことを確認できます。
User-Agent
がブラウザーと一致している。Accept-Language
の値がブラウザーと一致している。Accept-Encoding
ヘッダーが*
である。これにより、応答が確実に圧縮されます。Cookie
の値が空白ではない。Protocol
がhttps
である。X-Forwarded-For
の一番左のIPアドレスが、https://www.whatismyip.comなどのサービスから報告されるIPアドレスと一致している。IP-Determined Location
の値が、ロケーションに対して正確である。これらは、X-Forwarded-For
のIP関連ヘッダーに基づいています。
診断URLにアクセスすると404
が表示される場合は、設定に問題がある可能性があります。
https://[yourFullDomain]/_hcms/_worker/headers
にアクセスして、HubSpotがリバースプロキシーを介して要求から受信している全てのヘッダーを確認します。
プロキシーの最も重要なヘッダーは以下のとおりです。
X-Forwarded-For
X-HubSpot-Trust-Forwarded-For
X-HS-Public-Host
追加のヘッダー/不要なヘッダー、または重複する値を送信していないことを確認してください。
貴重なご意見をありがとうございました。