Nginx
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; } }
還有其他我忘記的配置嗎?
使用的配置是正確的。在這種情況下,問題是您落後於 Rackspace 負載平衡,預設情況下將超時設置為 30 秒。要更改 Rackspace 負載平衡超時值,請按照此說明進行操作。抽像地說,你做了兩個 API 呼叫:
- 獲取令牌:
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>'