HubSpotでリバースプロキシーを使用する

Last updated:
APPLICABLE PRODUCTS
  • Content Hub
    • Enterprise

HubSpotのCMS上に構築されたウェブサイトは自動的に、数百のローカルPOP(ポイント オブ プレゼンス)を持つHubSpotのグローバルなCDN(コンテンツ配信ネットワーク)を使用します。ただしお客さまの環境によっては、既存のCDNや複雑なルーティングルールをお持ちで、HubSpotの標準搭載CDNでは維持できない場合があります。 

注:

概要

リバースプロキシーはプロキシーサーバーの一種で、1つまたは複数のサーバーからリソースを取得し、そのリソースをプロキシーサーバー自体から来たかのようにクライアントに返します。

例えば、HubSpot CMSでホスティングされていないwww.website.comのような既存のウェブサイトがあり、www.website.com/blogでHubSpotが管理するブログをホスティングしているとします。このブログは実際にはHubSpotのサーバーから配信されますが、リバースプロキシーを使用すると、ウェブサイトと同じサーバーからホスティングされているように見えます。

注: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を使用して要求を転送するようにプロキシーを設定し、以下の設定を追加することができます。

  1. HubSpotからのパスに対してキャッシュを実行しないようにプロキシーを設定します。HubSpotがCDNのキャッシュの内容を自動的に管理するため、キャッシュの内容が公開されるとページが自動的に更新されます。サービスが応答をキャッシュする場合、ページは数時間または数日更新されない可能性があることにご注意ください。
  2. 元の要求者のクライアントIPアドレスを、X-Forwarded-Forヘッダーに追加するか、このヘッダーの前に付加します。これは、クライアントをそれぞれ区別するために必要です。CloudFrontなどの多くのサービスでは、これらのヘッダーが自動的に維持されます。
  3. 所在地に基づいてパーソナライズされたコンテンツが機能するようにするため、静的ヘッダーX-HubSpot-Trust-Forwarded-For: trueを渡します。これによりX-Forwarded-Forヘッダーを信頼しますが、このヘッダーは全てのアップストリームプロキシーで更新されていない可能性があります。
  4. 宛先ドメインの値が指定されたX-HS-Public-Hostヘッダーを渡します。
  5. 全てのHTTPメソッドを許可します。
  6. プロキシードメインにSSL証明書が発行され、インストールされていることを確認します。
  7. 全てのクエリー文字列を転送します。
  8. その他全てのリクエストヘッダーとレスポンスヘッダーをそのまま転送します(Cookieを含む)。
  9. ドメイン下の全てのパスをHubSpotにプロキシーすることが理想的です。そうでない場合は、ドメインからアセットを適切に読み込むために、パス/_hcms/*/hs/*/hubfs/*/hs-fs/*/cs/c/*、および/e3t/*をプロキシーする必要があります。 

Amazon CloudFrontにおけるリバースプロキシーのセットアップ

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ヘッダーを渡します。
    • [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を使用してリバースプロキシーを設定するには、SSL情報とロケーションパス情報を含むロケーション設定ファイルを作成する必要があります。 

注:nginxを使用したリバースプロキシーのセットアップについて詳しくは、nginx側の資料(英語)をご確認ください。特に、アップストリームトラフィックの保護proxy_ssl$proxy_protocol_addrなどの設定についてのドキュメントをご参照いただけます。

nginxを使用する場合、トラフィックをルーティングするために必要なヘッダーと設定がいくつかあります。以下は、始点として使用できるnginxロケーション設定ファイルのサンプルスニペットです。 

location ~ ^(/|/some-other-path) { proxy_set_header Host $http_host; proxy_set_header X-HS-Public-Host www.example.com proxy_pass_request_headers on; proxy_set_header X-HubSpot-Trust-Forwarded-For true; proxy_pass https://2XX93.sites-proxy.hscoscdnXX.net; proxy_ssl_name www.example.com; proxy_ssl_server_name on; proxy_set_header X-Real-IP $proxy_protocol_addr; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-HubSpot-Client-IP $proxy_protocol_addr; } location ~ ^(/hs|/_hcms|/hubfs|/hs-fs|/cs/c) { proxy_set_header Host $http_host; proxy_set_header X-HS-Public-Host www.example.com proxy_pass_request_headers on; proxy_set_header X-HubSpot-Trust-Forwarded-For true; proxy_pass https://2XX93.sites-proxy.hscoscdnXX.net; proxy_ssl_name www.example.com; proxy_ssl_server_name on; proxy_set_header X-Real-IP $proxy_protocol_addr; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-HubSpot-Client-IP $proxy_protocol_addr; }

上記のコードでは、プロキシー接続とコンテンツ ホスト ドメインが異なることにご注意ください。一方はHubSpotが提供するCNAMEですが、もう片方はコンテンツの提供元であり、HubSpotに追加するドメインと一致するドメインです。この違いは、プロキシーとHubSpotのサーバー間の安全な接続を確立するSNI(サーバー名表示)接続プロセスによるものです。

nginxプロキシーでこれを有効にするには、上記のコードにもある、以下の設定を含めてください。

proxy_ssl_name www.example.com; proxy_ssl_server_name on;

これらの設定は、オリジンドメインがホストとは異なるため、SNI SSL接続ハンドシェイクでサーバードメイン名を送信するようnginxに指示します。

HubSpotでのドメイン設定

プロキシーを設定したら、次にドメインを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の値が空白ではない。
  • Protocolhttpsである。
  • 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

追加のヘッダー/不要なヘッダー、または重複する値を送信していないことを確認してください。

コンテンツの公開

HubSpotのCMSを使用したコンテンツの公開は、ドメインがHubSpotによって直接ホスティングされている場合と同様に機能します。Cookieを使用するA/Bテストやコンテンツメンバーシップなどの機能は通常通り機能します。ページを作成するときには、URLで宛先ドメイン(利用可能な場合)を必ず選択してください。

 

リバースプロキシーの設定を支援する有料コンサルティングサービスのご利用を検討されているお客さまは、以下のフォームにご入力ください。


参考になりましたか?
こちらのフォームではドキュメントに関するご意見をご提供ください。HubSpotがご提供しているヘルプはこちらでご確認ください。