snello CMS
  • Snello CMS
  • Get Started
  • Architecture
    • Snello API
    • Snello ADMIN
  • Docker Images
    • Database
    • Storage
    • Mail settings
    • Docker compose
  • Metadata
    • UUIDs
    • To reuse existing database tables
    • Advanced configuration
    • Reserved Metadata Names
  • Field Definitions
    • Data Types
    • Multijoin: database and rest queries
    • CRUD options
  • How to query using REST API
    • metadata api
    • filters & limit & sort
      • protect your api
  • Conditions
    • Multijoin conditions
  • Documents
    • Download endpoint
  • How to publish your web pages
  • Select Queries
  • Authentication & Authorization
    • User & Roles
    • Password recovery
    • Url Map Rules
  • Links
  • Draggables & Droppables
    • angular syntax
  • Deploy in Production
    • Let’s Encrypt
    • Remove Hashbang
    • Traefik
    • Rendertron
  • Notes
    • Micronaut - create extensions
    • Native image
    • Editor for code
    • Multi languages
  • k8s cache distributed
  • Developers Space
    • Java code
    • Angular code
  • Roadmap
    • Java Evolution
    • Angular Evolution
    • Next features
Powered by GitBook
On this page
Edit on GitHub
  1. Deploy in Production

Rendertron

Rendertron is a dockerized, headless Chrome rendering solution designed to render & serialise web pages on the fly. It's mandatary to SEO rendering for spider.

server {
        listen 80;
        listen [::]:80;

        server_name website.com www. website.com;
        return 302 https://$server_name$request_uri;
}

server {
 	gzip on;
 	gzip_disable "msie6";
 	gzip_vary on;
 	gzip_proxied any;
 	gzip_comp_level 6;
 	gzip_buffers 16 8k;
 	gzip_http_version 1.1;
 	gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

        listen 443 ssl;
        listen [::]:443 ssl;

        server_name website.com www. website.com;


        ssl_certificate /etc/ssl/website.com.crt;
        ssl_certificate_key /etc/ssl/website.com.key;


        location / {
            root /usr/share/nginx/html;
            index index.html index.htm;
            try_files $uri @prerender;
        }



        location /api/ {
            proxy_pass  http://website/api/; # rest-api
            proxy_redirect     off;
            proxy_set_header   Host             $host;
            proxy_set_header   X-Real-IP        $remote_addr;
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;

            # this is the maximum upload size
            client_max_body_size 10M;
            client_body_buffer_size    16K;
        }

        location /login {
            proxy_pass  http://website/; # rest-api
            proxy_redirect     off;
            proxy_set_header   Host             $host;
            proxy_set_header   X-Real-IP        $remote_addr;
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;

            # this is the maximum upload size
            client_max_body_size 10M;
            client_body_buffer_size    16K;
        }

        location @prerender {
            root /usr/share/nginx/html;
            index index.html index.htm;

            set $prerender 0;
            if ($http_user_agent ~* "googlebot|bingbot|yandex|baiduspider|twitterbot|facebookexternalhit|rogerbot|linkedinbot|embedly|quora link preview|showyoubot|outbrain|pinterest|slackbot|vkShare|W3C_Validator|XML Sitemaps Generator|Google-Structured-Data-Testing-Tool|Screaming Frog SEO") {
                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;
            }

            if ($prerender = 1) {
                set $prerender "rendertron";
                rewrite .* /render/$scheme://$host$request_uri? break;
                proxy_pass http://rendertron;
            }
            if ($prerender = 0) {
               rewrite .* /index.html break;
               #try_files $uri $uri/ /index.html =404;
            }
        }
}

upstream website {
     server website:8080;
}

upstream rendertron {
     server rendertron:80;
}
PreviousTraefikNextNotes

Last updated 2 years ago

Using Rendertron in Kubernetes for SPA SEOMedium
GitHub - GoogleChrome/rendertron: A Headless Chrome rendering solutionGitHub
Logo
Logo
Dynamic Rendering with RendertronOfficial Google Webmaster Central Blog
Logo