Marlon Pascoal
Marlon Pascoal

Reputation: 85

prerender.io with staticfile buildpack

I'm trying to setup prerender.io with cloud foundry staticfile buildpack (https://github.com/cloudfoundry/staticfile-buildpack), but I can't get it to serve files correctly.

I couldn't find the default nginx.conf that staticfile uses as default. I'm using (https://github.com/cloudfoundry/staticfile-buildpack/blob/master/cf_spec/fixtures/reverse_proxy/nginx.conf) as a reference, but it does not seem to be the right one.

The nginx.conf below is partially working. For some reason, css is being loaded, however they are not being rendered. Just browser default styles are displayed.

A online preview of the server can be accessed at http://cabemcasa-front-staging-dev.mybluemix.net/

worker_processes 1;
daemon off;
error_log <%= ENV["APP_ROOT"] %>/nginx/logs/error.log;
events { 
    worker_connections 1024; 
}
http {
  log_format cloudfoundry '$http_x_forwarded_for - $http_referer - [$time_local] "$request" $status $body_bytes_sent';
  access_log <%= ENV["APP_ROOT"] %>/nginx/logs/access.log cloudfoundry;
  default_type application/octet-stream;
  sendfile on;
  gzip on;
  tcp_nopush on;
  keepalive_timeout 30;
  server {
    listen <%= ENV["PORT"] %>;
    server_name localhost;
    location / {
      root <%= ENV["APP_ROOT"] %>/public;
      index index.html index.htm Default.htm;
    }

    # location @prerender {
    #         proxy_set_header X-Prerender-Token xxx;

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

Upvotes: 1

Views: 207

Answers (1)

Leonardo Grade
Leonardo Grade

Reputation: 83

I have done something similar in another project. Try this:

worker_processes  1;

events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    gzip  on;

    server {
        listen      <%= ENV["PORT"] %>;
        root   <%= ENV["APP_ROOT"] %>/public;
        index  index.html;
        server_name  localhost;
        location / {
            try_files $uri @prerender;
        }

        location @prerender {
            proxy_set_header X-Prerender-Token sSfyna56hdgshmXfr24O;

            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)$") {
                set $prerender 0;
            }

            resolver 8.8.8.8;
            if ($prerender = 1) {
                set $prerender "service.prerender.io";
                rewrite .* /$scheme://$host$request_uri? break;
                proxy_pass http://$prerender;
            }
            if ($prerender = 0) {
                rewrite .* /index.html break;
            }

        }
    }
}

Upvotes: 1

Related Questions