मेरा मानना है कि prerender example का उत्तर है। यदि प्रीरेंडर 1 पर सेट है, तो यह फिर से लिखता है और फिर proxy_pass का उपयोग करता है। यह करने के लिए
if ($prerender = 0) {
rewrite .* /index.html break;
}
:
तो आप इस बदल जाएगा
if ($prerender = 0) {
rewrite .* /index.html break;
proxy_pass http://[INTERNAL IP]:[PORT];
}
मैं आगे संशोधनों के बाद से आप नोड का उपयोग कर रहे हैं और सामान स्थिर के लिए स्थापित की कुछ की जरूरत नहीं है होगा फ़ाइलें।
server {
listen 80;
server_name example.com;
location/{
try_files $uri @prerender;
}
location @prerender {
#proxy_set_header X-Prerender-Token YOUR_TOKEN;
set $prerender 0;
if ($http_user_agent ~* "baiduspider|twitterbot|facebookexternalhit|rogerbot|linkedinbot|embedly|quora link preview|showyoubot|outbrain|pinterest|slackbot|vkShare|W3C_Validator") {
set $prerender 1;
}
if ($args ~ "_escaped_fragment_") {
set $prerender 1;
}
if ($http_user_agent ~ "Prerender") {
set $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)") {
set $prerender 0;
}
#resolve using Google's DNS server to force DNS resolution and prevent caching of IPs
resolver 8.8.8.8;
if ($prerender = 1) {
#setting prerender as a variable forces DNS resolution since nginx caches IPs and doesnt play well with load balancing
set $prerender "service.prerender.io";
rewrite .* /$scheme://$host$request_uri? break;
proxy_pass http://$prerender;
}
if ($prerender = 0) {
proxy_pass http://[INTERNAL IP]:[PORT];
}
}
}
मुझे आशा है कि मदद करता है:
यहाँ मेरा अंतिम जवाब है। एक चीज जो मैं जोड़ूंगा वह यह है कि मैं प्रीरेंडर इंजन का उपयोग नहीं करता। स्पाइडर इंडेक्स लिंक और पेज कर सकते हैं जो जावास्क्रिप्ट और पीडीएफ का भी उपयोग करते हैं।
बस मेरे दो सेंट।
एक ही समस्या होने पर, नोड के बजाय पास्टर का उपयोग करना - बक्षीस – drewmoore
जोड़ना क्या आप nginx.conf दस्तावेज की आपूर्ति कर सकते हैं जहां चीजें होनी चाहिए और वे नहीं हो रहे हैं? 2. gisthub पर मैं "if's" के बहुत से उदाहरण देखता हूं, अगर किसी एक राज्य को वापस करने के लिए उपयोग किया जा सकता है (यदि xxx वापस लौटाता है) जब आप एकाधिक चर सेट करने के लिए उपयोग करते हैं तो यह गलत हो जाएगा। किसी भी 'अगर' को 'मानचित्र' के साथ किया जाना चाहिए और फिर एक स्थान ब्लॉक में एक या फिर लिखना चाहिए। – itpp13