3

I am working on a migration from nginx + passenger to nginx + unicorn and I have reached a point where I am a bit stuck.

When I attempt to view my test server, I get nothing but a 404 page. I am sure that I have something off in my vhost config but I just do not see what the issue is.

Any help with this is greatly appreciated.

This is the current version of my vhost file

upstream unicorn-staging {
  server unix:/data/appname/staging/current/tmp/sockets/unicorn-staging.sock fail_timeout=0;
}

server {
  listen 80 deferred;
  listen 443;
  ssl on;
  root /data/appname/staging/current/public;
  server_name foo;
  access_log /data/appname/staging/current/log/unicorn-staging-access.log;
  error_log /data/appname/staging/current/log/unicorn-staging-error.log;
  client_max_body_size 4G;
  ssl_certificate /data/appname/staging/shared/certs/appname.crt;
  ssl_certificate_key /data/appname/staging/shared/certs/appname.key;

  location / {
    proxy_pass http://unicorn-staging;
    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;
    proxy_set_header X-Forwarded-Proto https; # for SSL, add this

    client_max_body_size       10m;
    client_body_buffer_size    128k;

    proxy_connect_timeout      90;
    proxy_send_timeout         90;
    proxy_read_timeout         90;

    proxy_buffer_size          4k;
    proxy_buffers              4 32k;
    proxy_busy_buffers_size    64k;
    proxy_temp_file_write_size 64k;

    index  index.html index.htm;
  }

  location ~ \.(jpg|png|mp3|ogg)$ {
    valid_referers server_names;
    if ($invalid_referer) {
      return 403;
    }
  }

  location ~ \.(jpg|png|mp3|ogg|js|css|html|gif)$ {
    gzip_static on;
    expires max;
    add_header  Cache-Control public;
  }

  location ~ ^/(images|javascripts|stylesheets|assets)/  {
    root /data/appname/staging/current/public; # for asset pipeline and other static files
    expires max;
    break;
  }
  # redirect server error pages to the stat
  error_page  500 502 503 504  /50x.html;
}
6
  • Is there anything relevant in /data/appname/staging/current/log/unicorn-staging-error.log?
    – Alex
    Aug 22, 2012 at 18:24
  • This is what I am seeing in my unicorn-staging-error.log file gist.github.com/3428323
    – rottmanj
    Aug 22, 2012 at 18:51
  • What version of nginx are you using?
    – Alex
    Aug 22, 2012 at 18:55
  • I am running nginx: nginx version: nginx/1.0.5
    – rottmanj
    Aug 22, 2012 at 18:57
  • 1
    what is in unicorn-staging-error.log; ? Dec 19, 2012 at 15:22

1 Answer 1

1

Your unicorn configuration is most likely not setup correctly.

This happens on my server when nginx is running, but unicorn is not. The reason is that nginx tries to pass the request to the socket, but unicorn is not there to receive it.

By default, unicorn listens on port 8080 only. You can change your unicorn settings to listen on a different port, or a socket.

If you are using a unicorn configuration file (config/unicorn.rb), then inside that file, you should have something like (note you will have to change the socket path):

listen File.expand_path("tmp/sockets/unicorn.sock", RAILS_ROOT)

For debug purposes, I make it listen to a port as well.

listen File.expand_path("tmp/sockets/unicorn.sock", RAILS_ROOT)
listen 3000, :tcp_nopush => true

To start unicorn on your production web server, a command similar to the following needs to be run:

bundle exec unicorn -E production -c config/unicorn.rb

This uses the unicorn configuration file. See http://unicorn.bogomips.org/Unicorn/Configurator.html for an example configuration file.

If you do not use a unicorn config file, a command line switch is required in the format:

-l, --listen ADDRESS

For example:

bundle exec unicorn -l tmp/sockets/unicorn.sock

Note that I am using a relative path, because the pwd I use is the rails root directory.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .