2017-11-15 4 views
0

私たちは角度のあるアプリを持っており、SEOの目的でprerender.ioを実装しようとしています。Nginxでトークンを検出していないプレレンダー

我々は、サイトマップを使用して、すべてのURLをキャッシュされ、公式のnginxのチュートリアルに続く:https://gist.github.com/thoop/8165802

しかし、このメッセージを表示prerender.io保つ: 私たちは、トークンまだ事前レンダリングで要求を見ていないし。

あなたがここに私達のnginxのコードを確認することができます。

server { 
    listen 443; 
    server_name example.com; 
    access_log /var/log/nginx/example.com.ssl.access.log; 
    error_log /var/log/nginx/example.com.ssl.error.log debug; 

    #SSL conf 

    location/{ 

    try_files $uri @prerender; 

    if ($request_filename ~* ^.*?/([^/]*?)$) 
    { 
     set $filename $1; 
    } 

    if ($filename ~* ^.*?\.(eot)|(ttf)|(woff)$){ 
     add_header Access-Control-Allow-Origin *; 
    } 

    proxy_redirect off; 
    proxy_set_header X-Real-IP   $remote_addr; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header X-Forwarded-Proto $scheme; 
    proxy_set_header Host     $http_host; 
    proxy_set_header X-NginX-Proxy true; 
    proxy_set_header Connection ""; 
    proxy_http_version 1.1; 
    proxy_cache one; 
    proxy_cache_key sfs$request_uri$scheme; 

    proxy_pass http://example.com; 
    } 

    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|svg|eot)") { 
      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; 
     } 
    } 

} 

を我々はstackoverflowから、同様の問題にさまざまなソリューションを試みたが、何も動作...

+0

私はこれに答えたとき、私は昨日、これを見逃しているかもしれませんが、また、あなたのトークンがコメントアウトされている:#proxy_set_headerのX-事前レンダリング・トークンYOUR_TOKEN。その行から#を削除することを確認してください –

+0

答えに感謝しますが、それはコピー貼り付けエラーです:)トークンはコメントされていません。申し訳ありません。 –

答えて

0

try_filesが動作しない場合、私は思ったんだけどここ何らかの理由で。プリレンダーの設定をインラインで行うことはできますか?

server { 
    listen 443; 
    server_name example.com; 
    access_log /var/log/nginx/example.com.ssl.access.log; 
    error_log /var/log/nginx/example.com.ssl.error.log debug; 

    #SSL conf 

    location/{ 

    if ($request_filename ~* ^.*?/([^/]*?)$) 
    { 
     set $filename $1; 
    } 

    if ($filename ~* ^.*?\.(eot)|(ttf)|(woff)$){ 
     add_header Access-Control-Allow-Origin *; 
    } 

    #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|svg|eot)") { 
     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; 
    } 

    proxy_redirect off; 
    proxy_set_header X-Real-IP   $remote_addr; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header X-Forwarded-Proto $scheme; 
    proxy_set_header Host     $http_host; 
    proxy_set_header X-NginX-Proxy true; 
    proxy_set_header Connection ""; 
    proxy_http_version 1.1; 
    proxy_cache one; 
    proxy_cache_key sfs$request_uri$scheme; 

    proxy_pass http://example.com; 
    } 

} 
+0

回答ありがとうございますが、それでも動作しないようです:(まだこのメッセージを表示しています:まだプレレンダートークンでリクエストが見られませんでした) –

+0

修正済み!$ http_user_agentに 'Googlebot'を追加しました。 –

+0

Googlebotは、ユーザーエージェントによって確認されたくないため、偽装の罰則を受ける可能性があります。あなたのページのにを入力すると、Google、Bing、および他のクローラは?_escaped_fragment_ = URLをクロールします。 –

関連する問題