我有一个EC2实例,试图运行与Nginx和独angular兽的Rails应用程序。
大约60秒后,我不断收到502错误的网关错误:
这是我在nginx错误日志中得到的:
2017/02/10 18:03:38 [error] 13208#13208:* 1上游过早closures连接,同时从上游读取响应头,客户端:174.25.146.24,服务器:_,请求:“GET / welcome HTTP / 1.1” ,上游:“ http:// unix:/home/rails/myapp/shared/sockets/unicorn.sock:/ welcome ”,主机:“mydomain.com”
unicorn.stderr.log
E,[2017-02-13T00:58:12.456504#13149] ERROR – :worker = 0 PID:16535 timeout(31s> 30s),E,[2017-02-13T00:58:12.459388#13149] – :收割#工人= 0我,[2017-02-13T00:58:12.459499#13149]信息 – :工人= 0产卵…我,[2017-02-13T00:58:12.461390#16810]信息 – – :worker = 0派生pid = 16810我,[2017-02-13T00:58:12.461829#16810]信息 – :工人= 0准备
nginx.conf
user rails; worker_processes auto; pid /run/nginx.pid; events { worker_connections 1024; # multi_accept on; } http { ## # Basic Settings ## 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; ## # SSL Settings ## ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE ssl_prefer_server_ciphers on; ## # Logging Settings ## access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; ## # Gzip Settings ## gzip on; gzip_disable "msie6"; # gzip_vary on; # gzip_proxied any; # gzip_comp_level 6; # gzip_buffers 16 8k; # gzip_http_version 1.1; # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; # upstream unicorn { # server unix:/home/rails/myapp/shared/sockets/unicorn.sock fail_timeout=0; # } ## # Virtual Host Configs ## include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; }
unicorn.rb
# set path to application app_dir = File.expand_path("../..", __FILE__) shared_dir = "#{app_dir}" working_directory app_dir print shared_dir # Set unicorn options worker_processes 2 preload_app true timeout 30 print '1' # Set up socket location listen "#{shared_dir}/shared/sockets/unicorn.sock", :backlog => 64 print '2' # Logging stderr_path "#{shared_dir}/shared/log/unicorn.stderr.log" stdout_path "#{shared_dir}/shared/log/unicorn.stdout.log" print '3' # Set master PID location pid "#{shared_dir}/shared/pids/unicorn.pid" print '4'
网站可用/默认
upstream app { # Path to Unicorn SOCK file, as defined previously server unix:/home/rails/myapp/shared/sockets/unicorn.sock fail_timeout=0; } server { listen 80; server_name _; root /home/rails/myapp/public; try_files $uri/index.html $uri @app; location @app { proxy_pass http://app; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; } error_page 500 502 503 504 /500.html; client_max_body_size 4G; keepalive_timeout 10; }
在套接字上的权限:
srwxrwxrwx 1 rails rails 0 Feb 10 18:00 unicorn.sock
任何想法如何我可以跟踪这个呢?
您的Rails应用程序无法在由超时设置配置的时间(当前30秒,由unicorn.rb
的timeout 30
行配置)中返回对Unicorn HTTP服务器的响应。
或者增加unicorn.rb
的timeout
设置,或者(最好)调试为什么Rails应用程序要花费大于30秒才能响应请求。