簡體   English   中英

使用nginx和node.js進行預渲染將返回504

[英]Prerender with nginx and node.js returns 504

如果我對事情的理解正確,則可以以處理爬蟲的方式設置nginx(而不是使用nodejs進行設置)。 所以我從快速配置中刪除了app.use(require('prerender-node').set('prerenderToken', 'token'))並進行了以下nginx設置(我不使用prerender令牌):

 # Proxy / load balance (if more than one node.js server used) traffic to our node.js instances
 upstream my_server_upstream {
   server 127.0.0.1:9000;
   keepalive 64;
 }

 server {
   listen 80;

   server_name test.local.io;
   access_log /var/log/nginx/test_access.log;
   error_log /var/log/nginx/test_error.log;
   root /var/www/client;

   # Static content
   location ~ ^/(components/|app/|bower_components/|assets/|robots.txt|humans.txt|favicon.ico) {
     root /;
     try_files /var/www/.tmp$uri /var/www/client$uri =404;
     access_log off;
     sendfile  off;
   }

   # Route traffic to node.js for specific route: e.g. /socket.io-client
   location ~ ^/(api/|user/|en/user/|ru/user/|auth/|socket.io-client/|sitemap.xml) {
     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_pass_header  X-CSRFToken;
     sendfile  off;
     # Tells nginx to use the upstream server
     proxy_pass         http://my_server_upstream;
   }

   location / {
     root /var/www/client;
     index index.html;
     try_files $uri @prerender;
     access_log off;
     sendfile  off;
   }

   location @prerender {
     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;
     }

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

但是當我通過curl test.local.io?_escaped_fragment_=對其進行測試時,我got 504 in 344ms for http://test.local.io獲得got 504 in 344ms for http://test.local.io

節點版本為6.9.1。 我使用流浪漢來設置環境。

上面的配置工作正常。 它所缺少的只是/etc/hosts一個條目: 127.0.0.1 test.local.io

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM