De fapt, lucrez într-o companie și pentru a îmbunătăți SEO, încerc să configurez aplicația noastră web unghiulară (10) cu prerender.io pentru a trimite html redat crawlerelor care vizitează site-ul nostru.
Aplicația este dockerizată și expusă folosind un server nginx.Pentru a evita conflictul cu conf nginx existent (după ce puțini au încercat să-l folosească), am (re)pornit configurația din fișierul .conf furnizat în documentația prerender.io (https://gist.github.com/thoop/8165802), dar este imposibil pentru mine să obțin vreun răspuns de la serviciul de prerendare.
Mă confrunt mereu cu: „502: Gateway greșit” (partea client) și „nu a putut fi rezolvat (110: Operație expirată)” (partea server) când trimit o solicitare cu Googlebot ca agent de utilizator.
După construirea și rularea imaginii mele docker, site-ul web este expus corect pe portul 80. Este complet accesibil atunci când folosesc un browser web, dar eroarea apare când încerc o solicitare ca bot (folosind curl -A Googlebot http:// localhost:80).
Pentru a verifica dacă serviciul de prerendare primește corect cererea mea atunci când a fost nevoie, am încercat să folosesc o adresă URL generată pe pipedream.com, dar cererea nu vine niciodată.
Am încercat să folosesc soluții diferite (8.8.8.8 și 1.1.1.1), dar nimic nu s-a schimbat.
Am încercat să măresc resolver_timeout pentru a lăsa mai mult timp, dar tot aceeași eroare.
Am încercat să instalez curl în container deoarece imaginea mea se bazează pe o imagine alpină, curl a fost instalat cu succes, dar nu s-a schimbat nimic.
Iată fișierul meu de configurare nginx:
Server {
asculta 80 default_server;
root /usr/share/nginx/html;
index index.html;
Locație / {
try_files $uri @prerender;
}
locație @prerender {
proxy_set_header X-Prerender-Token TOKEN_HERE;
setați $prender 0;
if ($http_user_agent ~* "googlebot|bingbot|yandex|baiduspider|twitterbot|facebookexternalhit|rogerbot|linkedinbot|embedly|quora link preview|showyoubot|outbrain|pinterest\/0\.|pinterestbot|slackbot|vkShare|W3Chare_"Validator|W3Capp_" ) {
setați $prerender 1;
}
if ($args ~ "_fragment_escaped_") {
setați $prerender 1;
}
if ($http_user_agent ~ "Prerander") {
setați $prender 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)") {
setați $prender 0;
}
#resolve folosind serverul DNS Google pentru a forța rezoluția DNS și pentru a preveni memorarea în cache a IP-urilor
rezolutor 8.8.8.8;
resolver_timeout 60s;
dacă ($prerander = 1) {
#setarea prerandării ca variabilă forțează rezoluția DNS, deoarece nginx memorează IP-urile în cache și nu joacă bine cu echilibrarea încărcăturii
setați $prerender "service.prerender.io";
rescrie .* /$scheme://$host$request_uri? pauză;
proxy_pass http://$prerender;
}
dacă ($prerander = 0) {
rescrie .* /index.html pauză;
}
}
}
Și iată fișierul meu Docker:
FROM node: 12.7-alpine AS build
Mediu ARG=producție
WORKDIR /usr/src/app
COPIEAZĂ package.json package-lock.json ./
RUN instalarea npm
COPIE . .
RUN npm run build -- --configuration $environment
# Construire în două etape pentru că nu avem nevoie de lucruri legate de noduri
DIN nginx:1.17.1-alpin
RUN apk add --no-cache curl
COPIEAZĂ --from=build /usr/src/app/dist/app /usr/share/nginx/html
COPIEAZĂ prerender-nginx.conf /etc/nginx/conf.d/default.conf
EXPUNEREA 80
In speranta ca ma puteti ajuta :)