Server Ruby on Rails + unicorn + nginx cessent de répondre

Mon serveur fonctionne normalement, mais après 10 minutes sans demande, sa réponse est une mauvaise passerelle. Je pense vraiment que mes configurations sont en ordre, mais cela ne fonctionne pas. Je n’ai pas d’autres idées sur ce qui se passe.

Que mes configurations:

unicorn.rb:

@dir = File.expand_path(File.dirname(__FILE__)) + "/.." worker_processes 2 working_directory @dir timeout 10 listen File.join('/tmp/nusortingmais.sock') listen File.join('/tmp/nusortingmais_2.sock') preload_app true# if ENV['RAILS_ENV'] != 'development' GC.respond_to?(:copy_on_write_friendly=) and GC.copy_on_write_friendly = true check_client_connection false before_fork do |server, worker| Signal.trap 'TERM' do puts 'Unicorn master intercepting TERM and sending myself QUIT instead' Process.kill 'QUIT', Process.pid end defined?(ActiveRecord::Base) and ActiveRecord::Base.connection.disconnect! end after_fork do |server, worker| Signal.trap 'TERM' do puts 'Unicorn worker intercepting TERM and doing nothing. Wait for master to send QUIT' end defined?(ActiveRecord::Base) and ActiveRecord::Base.establish_connection end 

nginx config:

 upstream nusortingmais { # Path to Puma SOCK file, as defined previously server unix:/tmp/nusortingmais.sock max_fails=2 fail_timeout=10s; server unix:/tmp/nusortingmais_2.sock; } server { listen 80; server_name dev.nusortingmais.com.br; location / { autoindex on; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header Host $host; # time out settings proxy_next_upstream http_502 timeout; proxy_next_upstream_timeout 0; proxy_next_upstream_sortinges 0; proxy_connect_timeout 159s; proxy_send_timeout 600; proxy_read_timeout 600; proxy_buffer_size 64k; proxy_buffers 16 32k; proxy_busy_buffers_size 64k; proxy_temp_file_write_size 64k; proxy_pass_header Set-Cookie; proxy_redirect off; proxy_hide_header Vary; proxy_set_header Accept-Encoding ''; proxy_ignore_headers Cache-Control Expires; proxy_set_header Referer $http_referer; proxy_set_header Host $host; proxy_set_header Cookie $http_cookie; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://nusortingmais; } } 

gemfile:

 source 'https://rubygems.org' gem 'rails', '4.2.4' gem 'unicorn-rails', '~> 2.2' gem 'pg' gem 'mysql2', '~> 0.3.18' gem 'sass-rails', '~> 5.0' gem 'uglifier', '>= 1.3.0' gem 'coffee-rails', '~> 4.1.0' gem 'duktape' gem 'jquery-rails' gem 'turbolinks' gem 'jbuilder', '~> 2.0' gem 'bootstrap-sass' gem 'devise' gem 'simple_form' gem 'minitest' gem "paperclip", "~> 4.3" gem 'aws-sdk', ' 1.5.0.rc' gem 'sendgrid-ruby' gem 'zopim_rails' gem 'meta-tags' gem 'ckeditor' gem 'slick_rails' group :development do gem 'better_errors' gem 'binding_of_caller', :platforms=>[:mri_20] gem 'quiet_assets' gem 'rails_layout' gem 'spring-commands-rspec' gem 'web-console', '~> 2.0' gem 'spring' end group :production do gem 'therubyracer' end group :development, :test do gem 'factory_girl_rails' gem 'faker' gem 'pry-rails' gem 'pry-rescue' gem 'rspec-rails' gem 'rubocop' gem 'byebug' end group :test do gem 'capybara' gem 'database_cleaner' gem 'launchy' gem 'selenium-webdriver' end 

Log while donne une mauvaise passerelle:

 Started GET "/menus" for 127.0.0.1 at 2016-01-20 17:25:17 +0000 I, [2016-01-20T17:25:17.580380 #9] INFO -- : Processing by MenusController#index as HTML D, [2016-01-20T17:25:17.904933 #9] DEBUG -- : [1m[36mMenu Load (322.3ms)[0m [1mSELECT `menus`.* FROM `menus` ORDER BY created_at DESC[0m I, [2016-01-20T17:25:20.006674 #9] INFO -- : Started GET "/menus" for 127.0.0.1 at 2016-01-20 17:25:20 +0000 

Il rest dans Started GET et ne fait rien

    Voici ce que je vois se passe. Un seul backend unicorn écoute sur les deux sockets. Nginx effectue un équilibrage de charge entre eux. Cependant, deux parameters peuvent entraîner un “blocage” de l’équilibrage de la charge.

      # Sets unlimited sortinges before trying next server proxy_next_upstream_sortinges 0; # Unlimited time allowed before passing request to next server proxy_next_upstream_timeout 0; 

    Quelques recommandations:

    • Essayez de supprimer les lignes ci-dessus
    • Effectuez un équilibrage de charge réel en exécutant une deuxième copie de l’application principale ou en supprimant la complexité proxy_pass à l’utilisation du module en amont et en proxy_pass directement proxy_pass par l’application de backend unique existante.

    Enfin, lorsque vous obtenez le 502, essayez de tester directement le backend. Ensuite, vous saurez si le problème est que votre backend rest inactif en permanence, ou s’il ya un problème avec votre configuration Nginx.

    Pour tester directement l’application, vous pouvez utiliser socat pour vous connecter directement au socket:

     $ socat - UNIX-CONNECT:/you/socket/path.sock,crnl -->GET / HTTP/1.1 -->Host: example.com.com -->X-Forwarded-Proto: https --> 

    J’ai découvert ce qui se passait, le pare-feu Linux a tué la connexion. Lorsque je mets la firebase database dans la même machine, cela fonctionne sans difficultés.