CloudFlare作業者を使ったサブディレクトリへのルートトラフィック


もしあなたがSEOが取得のためにある程度の重要性を持っているプロジェクトや会社で働いているなら、あなたはすでにこの質問をあなた自身に問いかけてきました.

Should I route traffic to the remotely hosted (blog|faq|documentation) as a subdomain (blog.kactus.com) or as a subdirectory of my main domain (kactus.com/blog) ?


ディープダウン、我々はサブドメインとしての答えを気に入るはずです.ブログプロバイダ.IOとVilは引きます!しかし、そうすることはバックリンクとキーワード希釈に苦しむので、あなたの全体的なドメインSEOパフォーマンスに有害でありえます.要するに、それはあなたのブログにキーワードマッチとバックリンクがあなたのメインドメインに利益をもたらすということを意味します- Google展望から-彼らは2つの異なる実体です.
だからサブディレクトリ(またはサブフォルダ)の戦略は:我々はすべてのトラフィックからのルートkactus.com/blog 我々のリモートホストブログに.kactus.blogprovider.io . 我々のニーズのために、我々のオプションは何ですか?

逆プロキシの使用


お使いのWebサーバーの設定にアクセスする場合は、直接操作を行うことができるチャンスがたくさんあります.例えば、NGINX , 指定した動作を次のように設定できます:
location ^/blog/(.*) {
  proxy_pass https://kactus.blogprovider.io/$request_uri
}
Kactusでは、Herokuを使用してRubyとRailsのショップでアプリケーションをホストしているので、Webサーバーの設定にアクセスできません.約4年前の問題が発生したとき-この執筆の時点で-私たちは、アプリケーションサーバーから直接プロキシをプロキシから離れて多くのオプションを持っていませんでした.ルビーの宝石を使ったrack-reverse-proxy これは、外部サービスへのプロキシ要求に使用されるラックミドルウェアを実装します.
use Rack::ReverseProxy do
  reverse_proxy(
    /^\/blog(\/.*)$/,
    "https://kactus.blogprovider.io$1",
    timeout: 5,
    preserve_host: true
  )
end
うまくいった.かなりよく実際に.しかし、トラフィックが成長し、ビジネスは過去数年間でトラクションを得たので、プロキシを処理することは直接性能的に賢明に消耗することを証明します.

数週間、私たちのブログへの逆プロキシはサーバー時間の10 %近くを占めました.そして、それはより経済的な展望に入れられました.そして、我々がリモートサーバーから我々のブログページを提供している我々のサーバー経費の10 %近くに費やされたことを意味します.平均応答時間もかなり悪く、ピークがピークに近い350 msの平均であった.スケールに新しい解決策が必要だった.

入力する


一年ほど前、セットアップCloudflare エッジサーバとCDNとして.すべてのリクエストは、それを通過し、我々のユーザーにトップノッチ体験を提供するために最適化されています.CloudFlareは我々のアプリケーションサーバーの前に座っているので、我々は別のエンドポイントに着信要求をルーティングすることができた任意の方法があったかどうか疑問に思ったCloudflare Workers . 労働者はCloudFlareネットワーク上でコードを実行できる無サーバ環境です.ドキュメントがありますgreat examples of applications for this しかし、我々が興味を起こさせるものは、要求を支持しています.
前に述べたように、アプリケーションサーバーへのすべての要求はCloudFlareを通過します.我々のブログへのプロキシリクエストには、次のようにする必要があります.
  • ブログの開始要求をキャッチする
  • kactusに対応するブログページを取得します.ブログプロバイダ.io
  • ユーザへの応答を返す
  • 第一歩はかなり前進.作業員が起動するルートパターンを設定します.

    あなたが自由な計画に関しているならば、あなたは開いて失敗するために要求制限失敗モードオプションを更新したいかもしれません.その場合、あなたがあなたの労働者の呼出し割当をオーバーシュートするならば、要求は単にあなたの起源に続きます.我々は、我々を保ちましたRack::ReverseProxy ケースワーカーにおける我々の終わりへのフォールバックとしての実装.
    今すぐコードに.我々blog-proxy Workerは、fetch 労働者は1つだけ他のイベントに反応するscheduled スケジュールされた/cron労働者のために).取得イベントは、以前に設定されたルートパターンに一致する受信リクエストごとにトリガされます.ブログのページを取得し、応答をユーザーに返すことにより、このイベントに対応します.
    const blog = {
      hostname: "kactus.blogprovider.io"
    }
    
    async function handleRequest(request) {
      // returns an empty string or a path if one exists
      const formatPath = (url) => {
        const pruned = url.pathname.split("/").filter(part => part)
        return pruned && pruned.length > 1 ? `${pruned.join("/")}` : ""
      }
    
      const parsedUrl = new URL(request.url)
      const targetPath = formatPath(parsedUrl)
      return fetch(`https://${blog.hostname}/${targetPath}`)
    }
    
    addEventListener("fetch", event => {
      event.respondWith(handleRequest(event.request))
    })
    
    Worker Editorは、それらを展開する前に作業者をテストしデバッグするための素晴らしいインターフェイスを備えており、すべてがスムーズに実行されるようにします.

    それは今、私たちのブログは、サブディレクトリとして我々のメインドメインから直接提供され、我々は強力なSEOのセットアップとパフォーマンスの向上からすべての利点をリッピングすることができます!

    便利なリンクとリソース

  • Cloudflare SEO best practices with workers series
  • Cloudflare Workers docs
  • 写真でJosé Martín Ramírez Carrasco