Skip to content

Instantly share code, notes, and snippets.

@omosola
Created March 7, 2018 09:59
Show Gist options
  • Save omosola/401609ce7f7046662731441b53f1b4e3 to your computer and use it in GitHub Desktop.
Save omosola/401609ce7f7046662731441b53f1b4e3 to your computer and use it in GitHub Desktop.
Prerender.io NGINX Configuration File
# For more information on configuration, see:
# * Official English Documentation: http://nginx.org/en/docs/
# * Official Russian Documentation: http://nginx.org/ru/docs/
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf;
index index.html index.htm;
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name YOUR_SITE_GOES_HERE.com;
root /var/www/html/;
# Load configuration files for the default server block.
# include /etc/nginx/default.d/*.conf;
location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff|svg)$ {
expires 365d;
}
location / {
try_files $uri @prerender;
}
location @prerender {
proxy_set_header X-Prerender-Token YOUR_TOKEN_GOES_HERE;
set $prerender 0;
error_page 404 =200 /index.html;
if ($http_user_agent ~* "googlebot|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) {
rewrite .* /index.html break;
}
}
}
}
@omosola
Copy link
Author

omosola commented Mar 7, 2018

This is an alteration of the standard nginx.conf which should come automatically with your EC2 instance.

You just need to replace YOUR_SITE_GOES_HERE.com in the server#root value and YOUR_TOKEN_GOES_HERE in the X-Prerender-Token header. Then you should be good to go.

Feel free to leave constructive comments and/or improvements. Happy to improve on this!

@Torrichel
Copy link

Worked for me 👍
Thank you!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment