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 的經驗,但我認為向爬蟲機器人發送與最終用戶不同的內容並不是一個好方法。

相關內容