Nginx

nginx、unicorn 和 rails 的請求超時問題

  • November 13, 2014

我在 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;
       }
}

還有其他我忘記的配置嗎?

使用的配置是正確的。在這種情況下,問題是您落後於 Rackspace 負載平衡,預設情況下將超時設置為 30 秒。要更改 Rackspace 負載平衡超時值,請按照此說明進行操作。抽像地說,你做了兩個 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>'

引用自:https://serverfault.com/questions/642705