Nginx + Unicornio

Nginx + Unicornio

Estoy trabajando en una migración de nginx + pasajero a nginx + unicornio y he llegado a un punto en el que estoy un poco estancado.

Cuando intento ver mi servidor de prueba, no aparece nada más que una página 404. Estoy seguro de que tengo algo mal en mi configuración de vhost pero simplemente no veo cuál es el problema.

Cualquier ayuda con esto es muy apreciada.

Esta es la versión actual de mi archivo 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;
}

Respuesta1

Lo más probable es que la configuración de tu unicornio no esté configurada correctamente.

Esto sucede en mi servidor cuando nginx se está ejecutando, pero unicorn no. La razón es que nginx intenta pasar la solicitud al socket, pero Unicorn no está allí para recibirla.

De forma predeterminada, Unicorn escucha únicamente en el puerto 8080. Puedes cambiar la configuración de tu unicornio para escuchar en un puerto o enchufe diferente.

Si está utilizando un archivo de configuración de Unicorn ( config/unicorn.rb), dentro de ese archivo, debería tener algo como (tenga en cuenta que tendrá que cambiar la ruta del socket):

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

Para fines de depuración, también hago que escuche un puerto.

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

Para iniciar unicorn en su servidor web de producción, debe ejecutar un comando similar al siguiente:

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

Esto utiliza el archivo de configuración de Unicorn. Verhttp://unicorn.bogomips.org/Unicorn/Configurator.htmlpara ver un archivo de configuración de ejemplo.

Si no utiliza un archivo de configuración de Unicorn, se requiere un cambio de línea de comando en el formato:

-l, --listen ADDRESS

Por ejemplo:

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

Tenga en cuenta que estoy usando una ruta relativa, porque lo que pwduso es el directorio raíz de Rails.

información relacionada