<% @path = "/etc/nginx/rubber/mongrel.conf" %> upstream haproxy_mongrel { <% rubber_instances.for_role('haproxy').each do |ic| %> server <%= ic.name %>:<%= rubber_env.haproxy_listen_port %>; <% end %> } <% %w[http https].each do |protocol| %> # This server is setup to serve www over <%= protocol %>. server { <% if protocol == 'https' %> listen <%= rubber_env.web_ssl_port %>; ssl on; ssl_certificate /etc/ssl/certs/ssl-cert-snakeoil.pem; ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key; # ssl_certificate <%= RUBBER_ROOT %>/config/snapmylife.com.crt; # ssl_certificate_key <%= RUBBER_ROOT %>/config/snapmylife.com.key; <% else %> listen <%= rubber_env.web_port %>; <% end %> client_max_body_size 10M; server_name <%= rubber_env.domain %>; if ( $host = www.<%= rubber_env.domain %>) { rewrite ^\/(.*)$ http://<%= rubber_env.domain %>/$1 permanent; } root <%= RUBBER_ROOT + "/public" %>; # this rewrites all the requests to the maintenance.html # page if it exists in the doc root. This is for capistrano's # disable web task if (-f $document_root/system/maintenance.html) { rewrite ^(.*)$ /system/maintenance.html last; break; } location / { <%# nginx -> rails is http, so this tells rails the source protocol was https %> <%= 'proxy_set_header X_FORWARDED_PROTO https;' if protocol == 'https' %> # needed to forward user's IP address to rails proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # needed for HTTPS proxy_set_header Host $http_host; proxy_redirect false; proxy_max_temp_file_size 0; # If the file exists as a static file serve it directly without # running all the other rewrite tests on it if (-f $request_filename) { break; } # check for index.html for directory index # if its there on the filesystem then rewite # the url to add /index.html to the end of it # and then break to send it to the next config rules. if (-f $request_filename/index.html) { rewrite (.*) $1/index.html break; } # this is the meat of the rails page caching config # it adds .html to the end of the url and then checks # the filesystem for that file. If it exists, then we # rewite the url to have explicit .html on the end # and then send it on its way to the next config rule. # if there is no file on the fs then it sets all the # necessary headers and proxies to our upstream mongrels if (-f $request_filename.html) { rewrite (.*) $1.html break; } if (!-f $request_filename) { proxy_pass http://haproxy_mongrel; break; } } # catch errors from proxy so we can display our error page proxy_intercept_errors on; error_page 500 502 503 504 /500.html; location = /500.html { root <%= RUBBER_ROOT + "/public" %>; } error_page 404 /404.html; location = /404.html { root <%= RUBBER_ROOT + "/public" %>; } } <% end %>