nginx、unicorn 和 rails 的请求超时问题

nginx、unicorn 和 rails 的请求超时问题

我在 rails 中有一个应用程序,它在生产中运行 unicorn。有些请求需要很长时间才能处理。我已将服务器配置为增加超时时间,因此这些请求可以正常工作。问题是,当请求响应时间超过 30 秒时,我会收到以下消息:

暂停服务

该服务暂时不可用。请稍后重试。

unicorn.rb已经timeout 120配置好了,我的 nginx.conf 是:

upstream unicorn_my_app {
    server unix:/tmp/my_app.socket fail_timeout=0;
}

server {
        listen 80;
        client_max_body_size 4G;
        server_name www.my_app.com;

        proxy_read_timeout 120;

        keepalive_timeout 5;

        root /home/ubuntu/my_app/current/public;

        location / {
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header Host $http_host;
          proxy_redirect off;

          if (!-f $request_filename) {
            proxy_pass http://unicorn_my_app;
            break;
          }
        }

        error_page 404 500 502 503 504 /erro/erro.html;
        location = /erro/ {
          root /home/ubuntu/my_app/current/public;
        }
}

还有其他我忘记的配置吗?

答案1

使用的配置是正确的。本例中的问题是您使用的是 Rackspace Load Balance,默认情况下,超时设置为 30 秒。要更改 Rackspace Load Balance 超时值,按照此说明操作。抽象来说,你做了两个 API 调用:

1)获取代币:

curl -s -d \
'{
    "auth":
    {
       "RAX-KSKEY:apiKeyCredentials":
       {  
          "username": "your_api_username",  
          "apiKey": "your_api_key"}
    }  
}' \
-H 'Content-Type: application/json' \
'https://identity.api.rackspacecloud.com/v2.0/tokens' | python -m json.tool

2)修改LB超时:

curl -s -d \ '{"loadBalancer":{
    "timeout": 120
    } }' \
-H 'X-Auth-Token: token_returned_in_last_request' \
-H 'Content-Type: application/json' \
-X PUT \ 'https://iad.loadbalancers.api.rackspacecloud.com/v1.0/<your_customer_id>/loadbalancers/<your_lb_id>'

相关内容