NGINX — отправка запроса на бэкэнд, если запрос поступает от краулера/бота

NGINX — отправка запроса на бэкэнд, если запрос поступает от краулера/бота

У меня есть Single Page Application без серверного рендеринга. Поэтому, когда кто-то делится 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;
}

Это работает, но в URL-адресе Angular есть символ # перед URL-адресом маршрута, мне нужно удалить его перед отправкой запроса в специальный бэкэнд.

Итак, как мне удалить хеш из $request_uri?

Я попробовал несколько примеров перезаписи, но запрос отправляется на тот же домен, мне нужно отправить запрос на другой сервер/доменное имя.

решение1

Хэш #и его содержимое не отправляются на HTTP-сервер, поэтому они не являются частью $request_uriпеременной.

Какой именно запрос получает ваш бэкэнд с учетом вашего примера конфигурации?

У меня нет опыта работы с одностраничными приложениями и Google, но я не думаю, что отправлять поисковым роботам и конечным пользователям разный контент — это хороший подход.

Связанный контент