2016-10-30 10 views
0

返します。だから私は、エクスプレス構成からapp.use(require('prerender-node').set('prerenderToken', 'token'))を削除し、以下のnginxの設定をした(私は事前レンダリングトークンを使用しないでください):事前レンダリングは504

# 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

ノードバージョンを取得6.9.1です。私は環境を設定するために迷彩を使用します。

+0

あなたはhttp://127.0.0.1:3000で実行されている事前レンダリングサーバを持っていますか? '?_escaped_fragment_ =' URLにアクセスすると、レンダリングコンソールでどのような出力が表示されますか? –

+0

事前レンダリングサーバは127.0.0.1:3000上で動作し、出力は次のとおりです。 'HTTPの344msで504を得た:// test.local.io'たびI'カールtest.local.io _escaped_fragment_ = ' – user2814599

+1

場合'カールのhttp?: //127.0.0.1:3000/http:// test.local.io/'まだ504を返しますか? Prerenderサーバが動作しているサーバから 'test.local.io'にアクセスできますか? –

答えて

0

上記の設定が正常に動作します。それが欠けていたすべてが/etc/hostsのエントリです:127.0.0.1 test.local.io

関連する問題