ฉันทำงานในบริษัทแห่งหนึ่งและเพื่อปรับปรุง SEO ฉันกำลังพยายามตั้งค่าเว็บแอปเชิงมุม (10) ของเราด้วย prerender.io เพื่อส่ง html ที่แสดงผลไปยังโปรแกรมรวบรวมข้อมูลที่เยี่ยมชมเว็บไซต์ของเรา
แอปเชื่อมต่อและเปิดเผยโดยใช้เซิร์ฟเวอร์ nginxเพื่อหลีกเลี่ยงความขัดแย้งกับ nginx conf ที่มีอยู่ (หลังจากลองใช้ไม่กี่ครั้ง) ฉัน (ใหม่) เริ่มการกำหนดค่าจากไฟล์ .conf ที่ให้ไว้ในเอกสาร prerender.io (https://gist.github.com/thoop/8165802) แต่เป็นไปไม่ได้ที่ฉันจะได้รับการตอบกลับจากบริการแสดงล่วงหน้า
ฉันมักเผชิญกับ: "502: Bad Gateway" (ฝั่งไคลเอ็นต์) และ "ไม่สามารถแก้ไขได้ (110: การดำเนินการหมดเวลา)" (ฝั่งเซิร์ฟเวอร์) เมื่อฉันส่งคำขอโดยมี Googlebot เป็น User-agent
หลังจากสร้างและรันอิมเมจนักเทียบท่าของฉันแล้ว เว็บไซต์ได้รับการเปิดเผยอย่างถูกต้องบนพอร์ต 80 สามารถเข้าถึงได้อย่างสมบูรณ์เมื่อฉันใช้เว็บเบราว์เซอร์ แต่ข้อผิดพลาดเกิดขึ้นเมื่อฉันลองส่งคำขอเป็นบอต (โดยใช้ curl -A Googlebot http:// localhost:80)
ในการตรวจสอบว่าบริการ prerender ได้รับคำขอของฉันอย่างถูกต้องหรือไม่ เมื่อจำเป็น ฉันพยายามใช้ url ที่สร้างขึ้นบน pipedream.com แต่คำขอไม่มา
ฉันลองใช้ตัวแก้ไขอื่น (8.8.8.8 และ 1.1.1.1) แต่ไม่มีอะไรเปลี่ยนแปลง
ฉันพยายามเพิ่ม Solver_timeout เพื่อให้มีเวลามากขึ้น แต่ก็ยังมีข้อผิดพลาดเดิม
ฉันพยายามติดตั้ง curl ในคอนเทนเนอร์เพราะอิมเมจของฉันอิงจากอิมเมจอัลไพน์ ติดตั้ง curl สำเร็จแล้ว แต่ไม่มีอะไรเปลี่ยนแปลง
นี่คือไฟล์ conf 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|showyoubot|outbrain|pinterest\/0\.|pinterestbot|slackbot|vkShare|W3C_Validator|Whatsapp" ) {
ตั้ง $prerender 1;
}
ถ้า ($args ~ "_escaped_fragment_") {
ตั้ง $prerender 1;
}
ถ้า ($http_user_agent ~ "แสดงผลล่วงหน้า") {
ตั้ง $prerender 0;
}
ถ้า ($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;
Solver_timeout 60 วินาที;
ถ้า ($prerender = 1) {
#setting prerender เป็นตัวแปรบังคับการแก้ไข DNS เนื่องจาก nginx แคช IP และไม่สามารถเล่นได้ดีกับการทำโหลดบาลานซ์
ตั้ง $prerender "service.prerender.io";
เขียนใหม่ .* /$scheme://$host$request_uri? หยุดพัก;
proxy_pass http://$prerender;
}
ถ้า ($prerender = 0) {
rewrite .* /index.html แตก;
}
}
}
และนี่คือ Dockerfile ของฉัน:
จากโหนด: 12.7-alpine AS build
สภาพแวดล้อม ARG = การผลิต
เวิร์กดีอาร์ /usr/src/app
คัดลอก package.json package-lock.json ./
ติดตั้ง RUN npm
สำเนา .
RUN npm รัน build -- --configuration $environment
# สร้างสองขั้นตอนเพราะเราไม่ต้องการสิ่งที่เกี่ยวข้องกับโหนด
จาก nginx:1.17.1-อัลไพน์
RUN 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
หวังว่าคุณจะช่วยฉันได้ :)