Using prerender with proxy in nginx Using prerender with proxy in nginx nginx nginx

Using prerender with proxy in nginx


I believe that the prerender example has the answer. If prerender is set to 1, it uses rewrite and then proxy_pass.

So you would change this:

if ($prerender = 0) {            rewrite .* /index.html break;        }

to this:

if ($prerender = 0) {        rewrite .* /index.html break;        proxy_pass http://[INTERNAL IP]:[PORT];    }

I would make further modifications since you are using Node and don't need some of the stuff set up for static files.

Here is my final answer:

server {   listen 80;   server_name example.com;   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) {        proxy_pass http://[INTERNAL IP]:[PORT];    }}} 

I hope that helps. One thing that I will add is that I wouldn't use a prerender engine. Spiders can and do index links and pages that use javascript and PDFs even.

Just my two cents.