Rails 4 + nginx + licorne + ssl = 502 Bad Gateway
Navigateur montrant 502 Bad Gateway nginx. La seule bonne nouvelle, c'est ma SSL https et vert de verrouillage s'affiche.
Nginx Journaux d'Erreur ci-dessous
nginx/erreur.journal
*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"
maison/licorne/log/licorne.journal (on dirait que c'est en attente pour 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
Voici certains de mes fichiers pertinents:
/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/licorne/licorne.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/licorne
# 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/licorne.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
Laissez-moi savoir si vous voulez que je poste tous les autres fichiers.
Merci d'avance pour toute personne qui répond.
OriginalL'auteur J Grover | 2014-01-28
Vous devez vous connecter pour publier un commentaire.
Le problème est que la Licorne et de Nginx ne sont pas d'accord sur un socle commun. Aussi, dans les fichiers que vous avez posté, le
upstream
etproxy_pass
ne correspondent pas. Que diriez-vous:Dans le
server
contexte:Dans le
http
contexte:Dans la Licorne fichier de configuration (ici
/home/unicorn/unicorn.conf
):Note Licorne écoute sur une socket où Nginx postes de demandes.
OriginalL'auteur Eric Platon
C'était la même chose pour moi dans les Rails 4, mais j'ai ajouté un "SECRETKEYBASE" dans /confirg/secrets.yml
maintenant, cette erreur n'apparaît pas encore. C'était peut-être aller avec un certain genre de versions
Vous voyez une erreur 502 Bad Gateway forme de Nginx car il ne peut pas se connecter à un crash de la Licorne. Si vous regardez dans la Licorne, les journaux, vous verrez la clé manquante erreur.
OriginalL'auteur Gediminas
j'ai eu le même problème et je l'ai résolu en changeant le nom de la socket dans la nginx.conf et dans la licorne.fichiers de conf, le réglage de la "licorne.chaussette" à la place de celui que j'utilisais "licorne.rails_app.chaussette" dans les deux fichiers comme ceci:
/etc/nginx/nginx.conf
/home/licorne/licorne.conf
Et changer juste travaillé pour moi, c'est bizarre, car avant ils étaient dans les deux fichiers comme ceci "licorne.rails_app.chaussette" et je ne sais pas pourquoi j'obtiens l'erreur 502 lorsque j'ai d'autres serveur qui exécute comme ça, sans problème.
Espère que cela aide!
OriginalL'auteur Demi Magus