nginx

2015-03-01 20 views
12

में प्रॉक्सी के साथ प्रीरेंडर का उपयोग करके मैं angularjs पृष्ठों का स्नैपशॉट प्राप्त करने के लिए prerender.io का उपयोग करने का प्रयास कर रहा हूं। वर्तमान में मेरे पास वेब ऐप और nginx पोर्ट 80 से 4000 से रिवर्स प्रॉक्सी रीडायरेक्ट अनुरोधों के लिए एक नोडजेएस उदाहरण है।nginx

के अनुसार

prerender nginx पुस्तिका (https://gist.github.com/thoop/8165802) मैं prerender यूआरएल को खोज इंजन बॉट अनुरोध अग्रेषित कर सकते हैं, लेकिन क्योंकि मैं पहले से ही NodeJS आवेदन के लिए एक प्रॉक्सी है, मैं नहीं जानता कि मैं कैसे try_files निर्देश को पूर्व-कर सकते हैं।

मेरा सवाल है, मैं नोडजेएस एप्लिकेशन प्रॉक्सी और प्रीरेंडर निर्देश दोनों का उपयोग कैसे कर सकता हूं?

+0

एक ही समस्या होने पर, नोड के बजाय पास्टर का उपयोग करना - बक्षीस – drewmoore

+0

जोड़ना क्या आप nginx.conf दस्तावेज की आपूर्ति कर सकते हैं जहां चीजें होनी चाहिए और वे नहीं हो रहे हैं? 2. gisthub पर मैं "if's" के बहुत से उदाहरण देखता हूं, अगर किसी एक राज्य को वापस करने के लिए उपयोग किया जा सकता है (यदि xxx वापस लौटाता है) जब आप एकाधिक चर सेट करने के लिए उपयोग करते हैं तो यह गलत हो जाएगा। किसी भी 'अगर' को 'मानचित्र' के साथ किया जाना चाहिए और फिर एक स्थान ब्लॉक में एक या फिर लिखना चाहिए। – itpp13

उत्तर

4

मेरा मानना ​​है कि 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]; 
    } 
} 
} 

मुझे आशा है कि मदद करता है:

यहाँ मेरा अंतिम जवाब है। एक चीज जो मैं जोड़ूंगा वह यह है कि मैं प्रीरेंडर इंजन का उपयोग नहीं करता। स्पाइडर इंडेक्स लिंक और पेज कर सकते हैं जो जावास्क्रिप्ट और पीडीएफ का भी उपयोग करते हैं।

बस मेरे दो सेंट।

+1

'स्पाइडर इंडेक्स लिंक और पेज जो जावास्क्रिप्ट और पीडीएफ का उपयोग करते हैं, कर सकते हैं और कर सकते हैं। Google ने पिछले साल केवल जेएस प्रतिपादन जोड़ा था। क्या सभी क्रॉलर अब ऐसा करते हैं? –