乘客和Nginx => 502生产中的错误网关错误

时间:2011-11-22 23:05:41

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1 nginx passenger

我正在运行Nginx 1.0.6,Passenger 3.0.9,Rails 3.1.1,Ruby 1.9。在我的生产环境中,我在nginx_error.log文件中看到以下间歇性警告:

  

2011/11/22 14:44:40 [warn] 23288#0:* 474上游响应是   缓冲到临时文件/ opt / nginx / proxy_temp / 2/00 / 0000000002   在读取上游时,客户端:69.172.88.178,服务器:   www.memverse.com,请求:“GET / show_all_my_verses HTTP / 1.1”,   上游:“passenger:unix:/ passenger_helper_server:”,主持人:   “www.memverse.com”,推荐人:“http://www.memverse.com/quick_add/7352

以及以下错误导致502 Bad Gateway:

  

2011/11/21 15:35:20 [错误] 2118#0:* 60762上游过早关闭   从上游,客户端读取响应头时连接:   74.125.44.84,服务器:www.memverse.com,请求:“GET / blogs / feed / 9 HTTP / 1.1”,上游:“passenger:unix:/ passenger_helper_server:”,主持人:   “www.memverse.com”

我已经浏览了Passenger和Nginx文档,并且已经调整了我的nginx.conf文件中的几乎所有设置,但都无济于事。我希望有人能够至少指出我正确的方向。

下面是我的nginx.conf:

user  root;
worker_processes  4;

error_log  logs/error.log  error; # debug | info | notice | warn | error | crit
pid        logs/nginx.pid;

events {
    worker_connections  1024; # max_clients = worker_processes * worker_connections
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  logs/access.log  main;

    sendfile        on;

    keepalive_timeout  65;

    # Configure Passenger
    passenger_root /usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.9;
    passenger_ruby /usr/local/bin/ruby;

    passenger_log_level 1;
    passenger_debug_log_file /home/avitus/logs/passenger.log;

    rails_framework_spawner_idle_time 0;
    rails_app_spawner_idle_time 0;

    passenger_pool_idle_time 0;
    passenger_use_global_queue on;
    passenger_max_pool_size 15;

    server {
       listen 80;
       server_name www.pariday.com pariday.com;
       root /home/avitus/pariday.com/current/public;
       access_log /home/avitus/pariday.com/current/log/nginx_access.log main;
       error_log /home/avitus/pariday.com/current/log/nginx_error.log info;
       passenger_enabled on;
    }

    server {
        listen 80;
        server_name www.assetcorrelation.com assetcorrelation.com;
        root /home/avitus/assetcorrelation.com/current/public;
        access_log /home/avitus/assetcorrelation.com/current/log/nginx_access.log main;
        error_log /home/avitus/assetcorrelation.com/current/log/nginx_error.log info;
        passenger_enabled on;
    }

    server {
         listen       80;
         server_name  localhost;

         location / {
             root   html;
             index  index.html index.htm;
         }
    }
}

我已经对这个问题感到困惑了几天,所以任何帮助都会非常感激。说实话,如果有人能解释这两个警告/错误甚至意味着它会有所帮助。

2 个答案:

答案 0 :(得分:6)

第一个问题(“上游响应被缓冲到临时文件”)是由一些内容很多的页面引起的,并通过增加缓冲区大小来解决,如下所示:

proxy_buffers 8 16k;
proxy_buffer_size 32k;
passenger_buffers 8 16k;
passenger_buffer_size 32k;

通过增加服务器上的内存并将Passenger切换到保守的生成模式,解决了第二个问题('从上游读取响应头时'上游过早关闭连接')。 (它似乎与使用试图运行后台作业的旧Ruby宝石密切相关。)

答案 1 :(得分:0)

对我来说,在与备份服务器相同的上游使用 nginx 重试 502 帮助丑陋的黑客

:org