NGINX: envía la solicitud al backend si la solicitud proviene de un rastreador/bot

NGINX: envía la solicitud al backend si la solicitud proviene de un rastreador/bot

Tengo una aplicación de una sola página sin renderizado del lado del servidor. Entonces, cada vez que alguien comparte una URL del sitio en Facebook o Twitter, no muestra el título dinámico de la página.

Me gustaría enviar solicitudes de rastreador/bot a un backend especial que sirve una página con metaetiquetas OpenGraph.

El front-end está alojado en NGINX y hasta ahora tengo esta configuración:

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;
}

Esto funciona, pero la URL de Angular tiene el # antes de la URL de ruta, necesito eliminarlo antes de enviar la solicitud al backend especial.

Entonces, ¿cómo puedo eliminar el hash de $request_uri?

Intenté un par de ejemplos de reescritura, pero envía la solicitud al mismo dominio, necesito enviar la solicitud a otro servidor/nombre de dominio.

Respuesta1

El hash #y el contenido posterior no se envían al servidor HTTP, por lo que no forman parte de la $request_urivariable.

Con su configuración de ejemplo, ¿cuál es la solicitud exacta que recibe su backend?

No tengo experiencia con aplicaciones de una sola página ni con Google, pero no creo que sea un buen enfoque enviar contenido diferente a los robots rastreadores que a los usuarios finales.

información relacionada