Nginx + Unicórnio

Nginx + Unicórnio

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

Quando tento visualizar meu servidor de teste, não recebo nada além de uma página 404. Tenho certeza de que há algo errado na minha configuração do vhost, mas simplesmente 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;
}

Responder1

Provavelmente a configuração do seu unicórnio não está configurada corretamente.

Isso acontece no meu servidor quando o nginx está em execução, mas o unicórnio não. A razão é que o nginx tenta passar a solicitação para o soquete, mas o unicórnio não está lá para recebê-la.

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

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

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

Para fins de depuração, faço com que ele ouça uma porta também.

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

Para iniciar o unicorn em seu servidor 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. Verhttp://unicorn.bogomips.org/Unicorn/Configurator.htmlpara obter um exemplo de arquivo de configuração.

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

-l, --listen ADDRESS

Por exemplo:

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

Observe que estou usando um caminho relativo, porque o pwdque uso é o diretório raiz do Rails.

informação relacionada