Score:0

ข้อผิดพลาด Nginx, Docker, Prerender.io âไม่สามารถแก้ไขได้ (110: การดำเนินการหมดเวลา)â

ธง tr

ฉันทำงานในบริษัทแห่งหนึ่งและเพื่อปรับปรุง 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

หวังว่าคุณจะช่วยฉันได้ :)

djdomi avatar
za flag
เหมือนกับการคาดเดา แต่ทำไมไม่ลองโฮสต์ตัวแก้ไขของคุณเอง เนื่องจากคำขอส่วนใหญ่จะเหมือนกันและจะช่วยลดเวลาลง

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา