2016-06-01 51 views
0

我想在我的本地開發服務器上使用Prerender進行測試。 Flask(網站後端)的應用程序服務器在localhost:5000上運行,現在我已經在localhost:3000上設置了Prerender服務器。 論預渲染GitHub的頁面,它說,爲了使用預渲染爲本地服務,我需要預渲染與本地測試服務器

export PRERENDER_SERVICE_URL=<your local url> 

,也爲我的nginx的配置文件

server { 
    listen 80; 
    server_name example.com; 

    root /path/to/your/root; 
    index index.html; 

    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) { 
      rewrite .* /index.html break; 
     } 
    } 
} 

我有兩個問題:

1.什麼呢

export PRERENDER_SERVICE_URL=<your local url> 

嗎?我應該如何設置「您的本地網址」?它應該是網站的應用程序服務器(它是localhost:5000)的url還是它應該是Prerender服務器(它是localhost:3000)的url。

2.我改變我的nginx.conf包括:

server { 
    listen 80; 
    server_name localhost:5000; 

    root /path/to/my/root; 
    index index.html; 

    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 "localhost:3000"; 
      rewrite .* /$scheme://$host$request_uri? break; 
      proxy_pass http://$prerender; 
     } 
     if ($prerender = 0) { 
      rewrite .* /index.html break; 
     } 
    } 
} 

,它似乎並沒有工作。當我訪問本地主機(localhost:80)時,它說404沒有找到。似乎它甚至沒有正確地將流量路由到localhost:5000。

任何想法,我做了什麼錯?非常感謝!

回答

0

由於您使用的是nginx配置,因此不需要使用PRERENDER_SERVICE_URL。它不會爲你的情況做任何事情。

service.prerender.io更改爲localhost:3000就像您在nginx配置中所做的一樣,是指向您本地Prerender服務器的正確方法。

雖然,你只是沒有正確設置nginx。您可能必須將重寫更改爲index.html,並將其更改爲localhost:5000的proxy_pass。這應該得到localhost:80工作,然後您將訪問localhost:80/?_escaped_fragment_=

的預渲染頁面