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에 대한 경험은 없지만 최종 사용자와 크롤러 봇에 다른 콘텐츠를 보내는 것은 좋은 접근 방식이 아니라고 생각합니다.

관련 정보