NGINX-如果请求来自爬虫/机器人,则将请求发送到后端

NGINX-如果请求来自爬虫/机器人,则将请求发送到后端

我有一个没有服务器端渲染的单页应用程序。因此,每当有人在 Facebook 或 Twitter 上分享该网站的 URL 时,它都不会显示页面的动态标题。

我想将爬虫/机器人请求发送到提供带有 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 的经验,但我认为向爬虫机器人和最终用户发送不同的内容不是一个好方法。

相关内容