Skip to content

Instantly share code, notes, and snippets.

What would you like to do?
# Enable upload_progress module for easy cross browser progress bar support
# using only javascript client side
upload_progress foobar_uploads 1m;
server {
# We only need one server block to deal with HTTP and HTTPS
# avoids duplication
listen 80;
listen 443 default ssl;
# Sort out redirects
## If it has come from localhost - dont mess, handy for services running locally
if ($host = localhost ) { break; }
## If another domain name has resolved to this server (e.g.
## then redirect it permanently to the name we really want
if ($host != $server_name) { rewrite ^ $scheme://$server_name$request_uri permanent; }
# Rails isn't interested by default in any other type of request
# so deal with them here
if ($request_method !~ ^(GET|HEAD|PUT|POST|DELETE|OPTIONS)$ ){
return 405;
# We follow a convention of each site having it's own user account
# with a Capistrano esque layout
root /home/foobar/foobar/current/public;
# PCI Compliant settings
ssl_protocols SSLv3 TLSv1;
ssl_prefer_server_ciphers on;
# Do not forget to include all certificates for chain in this file
ssl_certificate /etc/nginx/certificates/;
ssl_certificate_key /etc/nginx/certificates/;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 5m;
# Your favorite error pages
error_page 404 /404.html;
error_page 422 /422.html;
error_page 500 /500.html;
# Simple way to serve static content and maintenance page if maintenance page present
try_files $uri /maintenance.html @passenger;
# We are not interested in uploads that are larger than 10MB
client_max_body_size 10m;
# Reached if no maintenance page or static content can fulfill request
location @passenger {
passenger_enabled on;
passenger_min_instances 2;
rack_env production;
# Make sure that Rails knows whether the connection was encrypted or not
passenger_set_cgi_param HTTP_X_FORWARDED_PROTO $scheme;
# Enable tracking of POST requests
track_uploads foobar_uploads 30s;
# Enable monitoring of POST requests reported in JSON
location /progress {
report_uploads foobar_uploads;
access_log /var/log/nginx/foobar.access.log;
# Starts passenger after nginx is rebooted
# Rather than on first request
Copy link

mikhailov commented Nov 26, 2010

what do you think about --with-http_gzip_static_module and gzip_static on; directive?

Copy link

theozaurus commented Nov 26, 2010

Those are enabled in the http section of nginx.conf in a similar way to yours.

http {
  include       /etc/nginx/mime.types;
  default_type  application/octet-stream;

  access_log    /var/log/nginx/access.log;

  sendfile on;
  tcp_nopush on;
  tcp_nodelay on;

  keepalive_timeout  65;

  gzip  on;
  gzip_http_version 1.1;
  gzip_comp_level 2;
  gzip_proxied any;
  gzip_types text/plain text/html text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript;
  gzip_vary on;

  server_names_hash_bucket_size 64;

  include /etc/nginx/conf.d/*.conf;
  include /etc/nginx/sites-enabled/*;

The compile options I use are:

# /opt/nginx-0.8.53/sbin/nginx -V
nginx version: nginx/0.8.53
built by gcc 4.2.4 (Ubuntu 4.2.4-1ubuntu4)
TLS SNI support disabled
configure arguments: --prefix=/opt/nginx-0.8.53 --with-http_ssl_module --add-module=/opt/ruby-enterprise/lib/ruby/gems/1.8/gems/passenger-3.0.0/ext/nginx --prefix=/opt/nginx-0.8.53 --conf-path=/etc/nginx/nginx.conf --with-http_ssl_module --with-http_gzip_static_module --add-module=/usr/local/src/nginx_upload_progress-v0.8.2

We should probably add in the msie6 options that you use, as it seems that is to get around a cache bug?! I'm interested in how you picked buffer and min_length values as well. We've not started to play with that at all.

Copy link

theozaurus commented Nov 26, 2010

Seem's we're totally missing out the gzip_static goodness. That looks great.

Copy link

mikhailov commented Dec 8, 2010

I have updated config file with gzip_static and nginx installation tips.
you can take a look

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