Tôi thực sự đang làm việc trong một công ty và để cải thiện SEO, tôi đang cố gắng thiết lập ứng dụng web góc cạnh (10) của mình với prerender.io để gửi html được hiển thị tới các trình thu thập dữ liệu truy cập trang web của chúng tôi.
Ứng dụng được cập nhật và hiển thị bằng máy chủ nginx.Để tránh xung đột với conf nginx hiện có (sau một vài lần thử sử dụng nó), tôi (đã) bắt đầu lại cấu hình từ tệp .conf được cung cấp trong tài liệu prerender.io (https://gist.github.com/thoop/8165802) nhưng tôi không thể nhận được bất kỳ phản hồi nào từ dịch vụ kết xuất trước.
Tôi luôn phải đối mặt với: "502: Bad Gateway" (phía máy khách) và "không thể giải quyết (110: Thao tác đã hết thời gian chờ)" (phía máy chủ) khi tôi gửi yêu cầu với Googlebot với tư cách là Tác nhân người dùng.
Sau khi xây dựng và chạy hình ảnh docker của tôi, trang web được hiển thị chính xác trên cổng 80. Nó hoàn toàn có thể truy cập được khi tôi sử dụng trình duyệt web, nhưng xảy ra lỗi khi tôi thử yêu cầu dưới dạng bot (sử dụng curl -A Googlebot http:// máy chủ cục bộ:80).
Để xác minh xem dịch vụ kết xuất trước có nhận đúng yêu cầu của tôi khi cần hay không, tôi đã thử sử dụng một url được tạo trên pipedream.com, nhưng yêu cầu không bao giờ đến.
Tôi đã thử sử dụng các trình phân giải khác nhau (8.8.8.8 và 1.1.1.1) nhưng không có gì thay đổi.
Tôi đã cố gắng tăng thời gian giải quyết để có thêm thời gian nhưng vẫn bị lỗi như vậy.
Tôi đã cố gắng cài đặt curl trong vùng chứa vì hình ảnh của tôi dựa trên hình ảnh núi cao, curl đã được cài đặt thành công nhưng không có gì thay đổi.
Đây là tập tin conf nginx của tôi:
người phục vụ {
nghe 80 default_server;
gốc /usr/share/nginx/html;
chỉ số index.html;
địa điểm / {
try_files $uri @prerender;
}
địa điểm @prerender {
proxy_set_header X-Prerender-Token TOKEN_HERE;
đặt $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" ) {
đặt $prerender 1;
}
if ($args ~ "_escaped_fragment_") {
đặt $prerender 1;
}
if ($http_user_agent ~ "Hiển thị trước") {
đặt $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)") {
đặt $prerender 0;
}
#resolve bằng cách sử dụng máy chủ DNS của Google để buộc phân giải DNS và ngăn các IP lưu vào bộ nhớ đệm
bộ giải quyết 8.8.8.8;
bộ phân giải_thời gian chờ 60 giây;
nếu ($prerender = 1) {
#setting prerender như một biến buộc phân giải DNS vì nginx lưu trữ IP và không hoạt động tốt với cân bằng tải
đặt $prerender "service.prerender.io";
viết lại .* /$scheme://$host$request_uri? nghỉ;
proxy_pass http://$prerender;
}
nếu ($prerender = 0) {
viết lại .* /index.html ngắt;
}
}
}
Và đây là Dockerfile của tôi:
TỪ nút: bản dựng 12.7-alpine AS
Môi trường ARG=sản xuất
WORKDIR /usr/src/ứng dụng
SAO CHÉP gói.json gói-lock.json ./
CHẠY cài đặt npm
SAO CHÉP . .
CHẠY npm run build -- --configuration $environment
# Xây dựng hai giai đoạn vì chúng tôi không cần những thứ liên quan đến nút
TỪ nginx:1.17.1-alpine
RUN apk thêm --no-cache curl
SAO CHÉP --from=build /usr/src/app/dist/app /usr/share/nginx/html
SAO CHÉP prerender-nginx.conf /etc/nginx/conf.d/default.conf
TIẾP XÚC 80
Hy vọng rằng bạn có thể giúp tôi :)