Navegador está mostrando 502 Bad Gateway – nginx. La única buena noticia es que mi SSL https y verde de bloqueo está mostrando.

Nginx Registros de Error por debajo de

nginx/error.registro de

*1 connect() failed (111: Connection refused) while connecting to upstream, client: xx.xxx.xx.xx, server: mysite.com, request: "GET /HTTP/1.1", upstream: "http://xxx.xxx.xx.xxx:80/maintenance.html", host: "mysite.com"

home/unicornio/log/unicornio.registro de (parece que está esperando para nginx):

I, [2014-01-28T17:18:37.176299 #31858]  INFO -- : listening on addr=127.0.0.1:8080 fd=10
I, [2014-01-28T17:18:37.176619 #31858]  INFO -- : worker=0 spawning...
I, [2014-01-28T17:18:37.177379 #31858]  INFO -- : worker=1 spawning...
I, [2014-01-28T17:18:37.178118 #31858]  INFO -- : master process ready
I, [2014-01-28T17:18:37.182850 #31861]  INFO -- : worker=0 spawned pid=31861
I, [2014-01-28T17:18:37.185475 #31863]  INFO -- : worker=1 spawned pid=31863
I, [2014-01-28T17:18:37.186023 #31861]  INFO -- : Refreshing Gem list
I, [2014-01-28T17:18:37.194198 #31863]  INFO -- : Refreshing Gem list
I, [2014-01-28T17:18:38.484772 #31861]  INFO -- : worker=0 ready
I, [2014-01-28T17:18:38.501165 #31863]  INFO -- : worker=1 ready

Aquí hay algunos de mis archivos relevantes:

/etc/nginx/sites-available/default

server {
    listen 443 default;

    ssl on;
    ssl_certificate    /etc/ssl/certs/ssl-bundle.crt;
    ssl_certificate_key     /etc/ssl/private/server.key;

    server_name mysite.com;

    root /home/username/mysite.com/current/public;
    try_files $uri/index.html $uri @unicorn;

    location @unicorn {
      proxy_redirect off;
      proxy_set_header X-Forwarded-Proto https;
      proxy_pass mysite.com;
    }

    error_page 502 503 /maintenance.html;
    error_page 500 504 /500.html;
    keepalive_timeout 5;
}

/etc/nginx/nginx.conf

user www-data;
worker_processes 4;
pid /var/run/nginx.pid;

events { worker_connections 1024; }

http {
        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        keepalive_timeout 65;
        types_hash_max_size 2048;
        server_tokens off;

        # server_names_hash_bucket_size 64;
        # server_name_in_redirect off;

        include /etc/nginx/mime.types;
        default_type application/octet-stream;

        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;

        gzip on;
        gzip_disable "msie6";
        gzip_types text/plain text/xml text/css text/comma-separated-values;
        upstream app_server { server 127.0.0.1:8080 fail_timeout=0; }

        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*;
}

/home/unicornio/unicornio.conf

listen "127.0.0.1:8080"
worker_processes 2
user "username"
working_directory "/home/username/mysite.com/current/"
pid "/home/unicorn/pids/unicorn.pid"
stderr_path "/home/unicorn/log/unicorn.log"
stdout_path "/home/unicorn/log/unicorn.log"

/etc/default/unicornio

# Change paramentres below to appropriate values and set CONFIGURED to yes.
CONFIGURED=yes

# Default timeout until child process is killed during server upgrade,
# it has *no* relation to option "timeout" in server's config.rb.
TIMEOUT=60

# Path to your web application, sh'ld be also set in server's config.rb,
# option "working_directory". Rack's config.ru is located here.
APP_ROOT=/home/username/mysite.com/current

# Server's config.rb, it's not a rack's config.ru
CONFIG_RB=/home/unicorn/unicorn.conf

# Where to store PID, sh'ld be also set in server's config.rb, option "pid".
PID=/home/unicorn/pids/unicorn.pid
UNICORN_OPTS="-D -c $CONFIG_RB -E production"

PATH=/usr/local/rvm/rubies/ruby-2.0.0-p353/bin:/usr/local/rvm/gems/ruby-2.0.0-p353/bin:/home/unicorn/.rvm/bin:/usr/local/sbin:/usr/bin:/b$

config/unicornio.rb

application     = "mysite.com"
remote_user     = "username"
env = ENV["RAILS_ENV"] || "production"
RAILS_ROOT = File.join("/home", remote_user, application, "current")

worker_processes 8
timeout 30
preload_app true

working_directory RAILS_ROOT
listen File.join(RAILS_ROOT, "tmp/unicorn.sock"), :backlog => 64
pid_path = File.join(RAILS_ROOT, "tmp/pids/unicorn.pid")
pid pid_path

stderr_path File.join(RAILS_ROOT, "log/unicorn-err.log")
stdout_path File.join(RAILS_ROOT, "log/unicorn-err.log")

before_fork do |server, worker|
  if defined?(ActiveRecord::Base)
    ActiveRecord::Base.connection.disconnect!
  end
  old_pid_path = "#{pid_path}.oldbin"
  if File.exists?(old_pid_path) && server.pid != old_pid_path
    begin
      Process.kill("QUIT", File.read(old_pid_path).to_i)
    rescue Errno::ENOENT, Errno::ESRCH
      # someone else did our job for us
    end
  end
end

after_fork do |server, worker|
  if defined?(ActiveRecord::Base)
    ActiveRecord::Base.establish_connection
  end

  # worker processes http://devmull.net/articles/unicorn-resque-bluepill
  # rails_env = ENV['RAILS_ENV'] || 'production'
  # worker.user('app', 'app') if Process.euid == 0 && rails_env == 'production'
end

Hágamelo saber si usted quisiera hacer un post de los otros archivos.
Gracias de antemano por cualquier persona que responde.

OriginalEl autor J Grover | 2014-01-28

3 Comentarios

  1. 9

    El problema es que el Unicornio y Nginx no están de acuerdo sobre un socket compartido. También, en los archivos que se han publicado, el upstream y proxy_pass no coinciden. Cómo acerca de:

    En el server contexto:

    location @unicorn {
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto https;
      proxy_set_header Host $http_host;
      proxy_redirect off;
      proxy_pass http://unicorn_server; # This name must match the upstream
    }

    En el http contexto:

    upstream unicorn_server {
      server unix:/var/run/my_site/unicorn.sock;
    }

    En el Unicornio archivo de configuración (aquí /home/unicorn/unicorn.conf):

    listen '/var/run/my_site/unicorn.sock', :backlog => 64

    Nota Unicornio se escucha en un zócalo donde Nginx puestos de solicitudes.

    Gracias Eric, este fue uno de los temas. Yo también tenía que hacer frente a un par de otros problemas en el camino, tales como asegurarse de que el /home/nombre de usuario/appname/actual/tmp/carpeta sockets existía en mi app y fue sym vinculados a /home/nombre de usuario/appname/shared/tomas

    OriginalEl autor Eric Platon

  2. 2

    Fue el mismo para mí en Rails 4, pero he añadido un «SECRETKEYBASE» en /confirg/secretos.yml

    production:
    secretkeybase: # add yours here
    Está usted seguro de que este es en realidad relacionados?
    ahora este error no se muestra de nuevo. Tal vez iba con algún tipo de versiones
    Usted está viendo un 502 Bad Gateway error de forma Nginx porque no se puede conectar a un accidentado Unicornio. Si usted mira en el Unicornio registros verás la clave que falta de error.

    OriginalEl autor Gediminas

  3. 0

    yo tenía el mismo problema y lo he solucionado cambiando el nombre del socket en el nginx.conf y en el unicornio.conf archivos, la configuración como «unicornio.calcetín» en lugar de la que yo estaba usando «unicornio.rails_app.calcetín» en tanto archivos como este:

    /etc/nginx/nginx.conf

    upstream unicorn {
      server unix:/tmp/unicorn.sock fail_timeout=0;
    }

    /home/unicornio/unicornio.conf

    listen "/tmp/unicorn.sock"

    Y cambiante que sólo funcionó para mí, es raro, porque antes de que se encontraban en tanto archivos como este «unicornio.rails_app.calcetín» y no sé por qué me sale el error 502 cuando tengo otro servidor que ejecuta como este sin problema.

    Espero que ayude!

    OriginalEl autor Demi Magus

Dejar respuesta

Please enter your comment!
Please enter your name here