nginx - прокси facebook / ботов на другой сервер без изменения канонического URL - PullRequest
0 голосов
/ 19 июня 2020

TL; DR; Как я могу сделать так, чтобы все запросы парсеров / ботов, достигающие моего интерфейса https://frontend.example.test/any/path/here, получали данные из https://backend.example.test/prerender/any/path/here без изменения канонического URL?

У меня сложная ситуация, когда у меня есть Vue приложение, которое извлекает данные из php API для визуализации данных. Они размещены в Китае, поэтому такие тонкости, как netlify prerender и prerender.io, не подходят.

Сначала я пробовал:

if ($http_user_agent ~* "googlebot|bingbot|yandex|baiduspider|twitterbot|facebookexternalhit|rogerbot|linkedinbot|embedly|quora link preview|showyoubot|outbrain|pinterest\/0\.|pinterestbot|slackbot|vkShare|W3C_Validator|whatsapp") {
  rewrite ^/(.*)$ https://backend.example.test/prerender/$1 redirect;
}

который работал, но Facebook использовал backend.example.text канонический URL frontend.example.test.

Установка og:url для внешнего приложения вызвала проблемы из-за перенаправления l oop. Затем я попытался установить og:url на интерфейс с параметром запроса, который пропускал nginx вперед, но по какой-то причине это не работало должным образом на живом сервере, и я полагаю, что facebook все равно будет извлекать данные из в любом случае конечный URL.

Таким образом, я полагаю, что единственное решение - использовать proxy_pass, но это не разрешено с URI внутри оператора if (и я прочитал if is evil article ).

Я чувствую, что все, что мне нужно, это что-то вроде работающей версии:

location / {
  if ($http_user_agent ~* "googlebot|bingbot|yandex|baiduspider|twitterbot|facebookexternalhit|rogerbot|linkedinbot|embedly|quora link preview|showyoubot|outbrain|pinterest\/0\.|pinterestbot|slackbot|vkShare|W3C_Validator|whatsapp") {
    proxy_pass https://backend.example.test/prerender;
  }
  ...
}

(I am of course aware of the contradiction of having to have Facebook sharing work in China, but the client is requesting this for their international users as well).
...