Nginx + Unicorn

3

Estou trabalhando em uma migração de nginx + passageiro para nginx + unicórnio e cheguei a um ponto em que estou um pouco preso.

Quando tento visualizar meu servidor de teste, não obtenho nada além de uma página 404. Tenho certeza de que tenho algo errado na configuração do vhost, mas não vejo qual é o problema.

Qualquer ajuda com isso é muito apreciada.

Esta é a versão atual do meu arquivo vhost

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;
}
    
por rottmanj 22.08.2012 / 20:19

1 resposta

1

A configuração do seu unicórnio provavelmente não está configurada corretamente.

Isso acontece no meu servidor quando o nginx está rodando, mas o unicórnio não está. A razão é que o nginx tenta passar o pedido para o socket, mas o unicórnio não está lá para recebê-lo.

Por padrão, o unicorn escuta apenas na porta 8080. Você pode alterar suas configurações de unicórnio para ouvir em uma porta diferente ou em um soquete.

Se você estiver usando um arquivo de configuração de unicórnio ( config/unicorn.rb ), então dentro desse arquivo, você deve ter algo como (note que você terá que mudar o caminho do socket):

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

Para propósitos de depuração, eu faço ouvir também uma porta.

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

Para iniciar o unicórnio em seu servidor da web de produção, um comando semelhante ao seguinte precisa ser executado:

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

Isso usa o arquivo de configuração do unicórnio. Consulte o link para obter um exemplo de arquivo de configuração.

Se você não usar um arquivo de configuração de unicórnio, será necessário um switch de linha de comando no formato:

-l, --listen ADDRESS

Por exemplo:

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

Note que estou usando um caminho relativo, porque o pwd que eu uso é o diretório raiz do rails.

    
por 12.02.2014 / 02:58