Рейтинг:0

Ошибка Nginx, Docker, Prerender.io «не удалось устранить (110: время ожидания операции истекло)».

флаг tr

На самом деле я работаю в компании, и для улучшения 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

Надеюсь, что вы могли бы мне помочь :)

djdomi avatar
флаг za
Просто как предположение, но почему бы не разместить свой собственный резолвер, так как большинство запросов будет одинаковым, и это сократит время?

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.