Nginx Configuration For Rails
This page describes configuration (example) of the Nginx with Rails (through Unicorn).
Nginx
/etc/nginx/nginx.conf
worker_processes 8;
user nobody nobody;
events {
worker_connections 4096;
accept_mutex on;
use epoll;
}
http {
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
client_max_body_size 40M;
include mime.types;
default_type application/octet-stream;
sendfile on;
gzip on;
gzip_vary on;
gzip_proxied any;
gzip_min_length 500;
gzip_http_version 1.0;
gzip_disable "MSIE [1-6]\.";
gzip_types text/plain text/xml text/css text/javascript application/x-javascript application/xml application/json;
server {
return 404;
}
include /etc/nginx/servers/*;
}
/etc/nginx/servers/example.conf
server {
listen 80;
server_name dsperansky.info;
root /var/www/dsperansky.info/public;
location ~* ^/assets/ { expires 1d; }
location / {
try_files $uri @unicorn;
}
location @unicorn {
proxy_pass http://unix:/var/www/dsperansky.info/tmp/sockets/unicorn.sock;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_redirect off;
}
}
reload
/etc/init.d/nginx reload
Rails & Unicorn
config/unicorn.rb
worker_processes 5
dir = '/var/www/dlibrary.org/vsp/'
working_directory dir
preload_app true
listen dir + 'tmp/sockets/unicorn.sock', :backlog => 64
timeout 60
pid dir + 'tmp/pids/unicorn.pid'
stderr_path dir + 'log/unicorn.stderr.log'
stdout_path dir + 'log/unicorn.stdout.log'
before_fork do |server, worker|
defined?(ActiveRecord::Base) and ActiveRecord::Base.connection.disconnect!
end
after_fork do |server, worker|
defined?(ActiveRecord::Base) and ActiveRecord::Base.establish_connection
end
start
test -s "tmp/pids/unicorn.pid" && kill -QUIT `cat tmp/pids/unicorn.pid`
stop
bundle exec unicorn -c config/unicorn.rb -E production -D'