NGINX - リクエストがクローラー/ボットから来ている場合は、バックエンドにリクエストを送信します

NGINX - リクエストがクローラー/ボットから来ている場合は、バックエンドにリクエストを送信します

サーバー側レンダリングのないシングル ページ アプリケーションがあります。そのため、誰かがサイトの URL を Facebook や Twitter で共有しても、ページの動的なタイトルは表示されません。

OpenGraph メタタグを含むページを提供する特別なバックエンドにクローラー/ボット リクエストを送信したいと思います。

フロントエンドは NGINX でホストされており、これまでの構成は次のとおりです。

server {
    listen       80;
    listen  [::]:80;

    location / {
    
        if ($http_user_agent ~* "linkedinbot|googlebot|yahoo|bingbot|baiduspider|yandex|yeti|yodaobot|gigabot|ia_archiver|facebookexternalhit|twitterbot|developers\.google\.com") {
            return 307 https://renderer_service_domain$request_uri;
    }

    root   /usr/share/nginx/html;
    index  index.html;
}

これは機能しますが、Angular の URL にはルート URL の前に # があるため、特別なバックエンドにリクエストを送信する前にこれを削除する必要があります。

では、 $request_uri からハッシュを削除するにはどうすればよいでしょうか?

いくつかの書き換え例を試しましたが、リクエストは同じドメインに送信されるため、別のサーバー/ドメイン名にリクエストを送信する必要があります。

答え1

ハッシュ#とその後の内容は HTTP サーバーに送信されないため、$request_uri変数の一部ではありません。

例の設定では、バックエンドが受信する正確なリクエストは何ですか?

私はシングルページ アプリと Google の経験はありませんが、エンド ユーザーとは異なるコンテンツをクローラー ボットに送信するのは良いアプローチではないと思います。

関連情報