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).