На самом деле я работаю в компании, и для улучшения SEO я пытаюсь настроить наше угловое (10) веб-приложение с prerender.io для отправки обработанного HTML сканерам, посещающим наш сайт.
Приложение докеризовано и доступно с помощью сервера nginx.Чтобы избежать конфликта с существующей конфигурацией nginx (после нескольких попыток ее использования), я (пере) начал настройку из файла .conf, представленного в документации prerender.io (https://gist.github.com/thoop/8165802), но я не могу получить ответ от службы пререндеринга.
Я всегда сталкиваюсь с: «502: Bad Gateway» (на стороне клиента) и «не удалось разрешить (110: время ожидания операции истекло)» (на стороне сервера), когда я отправляю запрос с Googlebot в качестве агента пользователя.
После создания и запуска моего образа докера веб-сайт правильно отображается на порту 80. Он полностью доступен, когда я использую веб-браузер, но возникает ошибка, когда я пытаюсь выполнить запрос в качестве бота (используя curl -A Googlebot http:// локальный: 80).
Чтобы проверить, правильно ли служба предварительного рендеринга получает мой запрос, когда это необходимо, я попытался использовать URL-адрес, сгенерированный на pipedream.com, но запрос так и не пришел.
Я пробовал использовать другой резолвер (8.8.8.8 и 1.1.1.1), но ничего не изменилось.
Я попытался увеличить resolver_timeout, чтобы дать больше времени, но все равно та же ошибка.
Я попытался установить curl в контейнер, потому что мой образ основан на образе alpine, curl был успешно установлен, но ничего не изменилось.
Вот мой файл конфигурации nginx:
сервер {
слушать 80 default_server;
корень /usr/share/nginx/html;
индекс index.html;
место расположения / {
try_files $uri @prerender;
}
местоположение @prerender {
proxy_set_header X-Prerender-Token TOKEN_HERE;
установить $ prerender 0;
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" ) {
установить $ prerender 1;
}
если ($args ~ "_escaped_fragment_") {
установить $ prerender 1;
}
если ($ http_user_agent ~ "Prerender") {
установить $ prerender 0;
}
if ($uri ~* "\.(js|css|xml|less|png|jpg|jpeg|gif|pdf|doc|txt|ico|rss|zip|mp3|rar|exe|wmv|doc|avi| ppt|mpg|mpeg|tif|wav|mov|psd|ai|xls|mp4|m4a|swf|dat|dmg|iso|flv|m4v|torrent|ttf|woff|svg|eot)") {
установить $ prerender 0;
}
#resolve с использованием DNS-сервера Google для принудительного разрешения DNS и предотвращения кэширования IP-адресов
резольвер 8.8.8.8;
resolver_timeout 60 с;
если ($ prerender = 1) {
# установка prerender в качестве переменной принудительно разрешает DNS, поскольку nginx кэширует IP-адреса и плохо работает с балансировкой нагрузки
установить $prerender "service.prerender.io";
переписать .* /$scheme://$host$request_uri? сломать;
proxy_pass http://$prerender;
}
если ($ prerender = 0) {
переписать .* /index.html перерыв;
}
}
}
А вот мой Dockerfile:
ОТ узла: 12.7-альпийская сборка AS
Среда ARG = производство
РАБОЧИЙ КАТАЛОГ /usr/src/app
КОПИРОВАТЬ package.json package-lock.json ./
ЗАПУСТИТЬ установку npm
КОПИРОВАТЬ . .
ЗАПУСК npm run build -- --configuration $environment
# Двухэтапная сборка, потому что нам не нужны вещи, связанные с узлом
ОТ nginx: 1.17.1-alpine
ЗАПУСК apk добавить --no-cache curl
КОПИРОВАТЬ --from=build /usr/src/app/dist/app /usr/share/nginx/html
КОПИРОВАТЬ prerender-nginx.conf /etc/nginx/conf.d/default.conf
ЭКСПОЗИЦИЯ 80
Надеюсь, что вы могли бы мне помочь :)