咱們知道Angular是MVC框架,頁面內容是動態加載的,因此若是由搜索引擎的蜘蛛來爬的話,根本爬不出實際的東西,Prerender應運而生。你能夠把它當作是一個可以讀懂javascript的服務器端瀏覽器(Server-side browser),讀懂js以後,它可以輸出由js動態加載的頁面內容,這給爬蟲來看就正合適。業界最簡單的方案是使用Prerender + nginx反向代理。這裏以tomi.in爲例介紹配置流程。javascript
實際上就是搭建了一個Prerender服務器,給它傳遞參數,它幫你把JS動態頁面靜態化.java
git clone https://github.com/prerender/prerender.git
而後cd Prerender
進入目錄npm install
安裝模塊依賴node server.js
運行服務(可用nohup node server.js &
使其運行於後臺)這裏有一個坑,Prerender默認用3000端口,注意你的端口不要被佔用了,不然它會給出很奇怪的錯誤提示.node
要達到如下目的:nginx
所以,修改nginx.conf的server段以下:git
server { listen 80; server_name www.tomi.in tomi.in; location ~* / { set $prerender 0; if ($http_user_agent ~* "baiduspider|twitterbot|facebookexternalhit|rogerbot|linkedinbot|embedly|quora link preview|showyoubot|outbrain|pinterest|slackbot") { set $prerender 1; } if ($args ~ "_escaped_fragment_") { set $prerender 1; } 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)") { set $prerender 0; } if ($prerender = 1) { rewrite .* /$scheme://$host$request_uri? break; proxy_pass http://localhost:3000; } if ($prerender = 0) { proxy_pass http://localhost:4000; } } }
這裏作了兩件事:github
_escaped_fragment_
那麼就反向代理給內部的Prerender服務(localhost:3000),讓它去渲染頁面嗯,以前給過demo,但如今處於安全性的考慮,你們仍是直接在百度搜索site:h7sc.com
好了。npm