2

Unicorn の Rails アプリの前にリバース プロキシとして nginx を配置しています。

タイムアウトのデフォルトは上書きされていません。

私が抱えている問題は次のとおりです。

http で 5 秒以上かかるページをリクエストすると、正常に動作します。

httpsS で 5 秒以上かかる特定のページをリクエストすると、324 (サーバーからの空の応答) が返されます。システム上の他のページをリクエストすると、https で問題なく動作します。

テンプレートを削除してスリープ 6 を設定し、テンプレートが空のレンダリングを待機するようにしたため、これがタイミングの問題であることを確認できます。

リクエストには、js と css へのサブリクエストがいくつかあります。これらは、個別に呼び出すと正常に機能します。

問題の URL の場合、nginx エラー ログはソケット読み取りエラーを示します。

http でテンプレートのレンダリングとサブリクエストを行う場合、

https の失敗した URL では、リクエストをアップストリームに2 回送信しますが、サブリクエストを送信せずにそこで終了します。(レールアプリは、それが正常にレンダリングされたと主張しています)

奇妙なことに、元のリクエストを上流に 2 回送信した後、終了します。

ログと構成ファイルは次のとおりです。

NGINX ERROR LOG (レンダリングに時間がかかる特定の URL を読み取るときの HTTPS のみ):

2012/11/06 15:05:00 [情報] 5717#0: *4012 SSL_write() が失敗しました (SSL:) (32: 壊れたパイプ) アップストリームの読み取り中に、クライアント: 10.2.20.98、サーバー: cloud.zia4buildings.com 、リクエスト: "GET /admin/datasets HTTP/1.1"、アップストリーム: "http://127.0.0.1:3000/admin/datasets"、ホスト: "cloud.zia4buildings.com"、リファラー: "https://cloud .zia4buildings.com/admin/sage_categories"

2012/11/06 15:05:03 [情報] 5717#0: *4027 SSL_write() が失敗しました (SSL:) (32: 壊れたパイプ) アップストリームの読み取り中に、クライアント: 10.2.20.98、サーバー: cloud.zia4buildings.com 、リクエスト: "GET /admin/datasets HTTP/1.1"、アップストリーム: "http://127.0.0.1:3000/admin/datasets"、ホスト: "cloud.zia4buildings.com"、リファラー: "https://cloud .zia4buildings.com/admin/sage_categories"

[編集] 問題は、https プロキシ パスのタイムアウトです。任意のページ (非常に軽いページでも) で 6 秒間スリープすると、https 要求が失敗します。

**APPLICATION LOGS:**
(my comments in (-- --)
**HTTP:**

Started GET "/admin/datasets" for 127.0.0.1 at 2012-11-06 09:19:40 -0700
  Processing by Admin::DatasetsController#index as HTML
(--  lots of these ok --)
Rendered admin/datasets/_dataset.html.erb (0.0ms)
Rendered admin/datasets/_dataset_category.html.erb (5.4ms)
Rendered admin/datasets/_dataset_category.html.erb (0.0ms)
Rendered admin/datasets/_dataset_category.html.erb (0.0ms)
Rendered admin/datasets/_dataset_category.html.erb (0.0ms)
Rendered admin/datasets/_dataset_category.html.erb (0.0ms)
Rendered layouts/_admin_links.html.erb (4.1ms)
Rendered admin/datasets/index.html.erb within layouts/admin (5694.0ms)
Completed 200 OK in 5704ms (Views: 5171.9ms | ActiveRecord: 531.4ms)


Started GET "/stylesheets/dyn_stylesheets/dynamic.css" for 127.0.0.1 at 2012-11-06 09:15:31 -0700
  Processing by DynStylesheetsController#index as CSS
  Parameters: {"id"=>"dynamic"}
Exist fragment? views/rating_system_css_colors (1.4ms)
Read fragment views/rating_system_css_colors (0.1ms)
Exist fragment? views/leed_category_css_colors (0.4ms)
Read fragment views/leed_category_css_colors (0.0ms)
Exist fragment? views/sage_category_css_colors (0.3ms)
Read fragment views/sage_category_css_colors (0.0ms)
Exist fragment? views/node_css_colors (3.3ms)
Read fragment views/node_css_colors (0.0ms)
Rendered dyn_stylesheets/dynamic.css.erb (9.8ms)
Completed 200 OK in 17ms (Views: 12.1ms | ActiveRecord: 4.0ms)
(-- EOF HTTP success request --)



**HTTPS:**

Started GET "/admin/datasets" for 127.0.0.1 at 2012-11-06 09:20:44 -0700
  Processing by Admin::DatasetsController#index as HTML
Rendered admin/datasets/_set_field.html.erb (15.8ms)
(--  lots of these ok --)
Rendered admin/datasets/_dataset_category.html.erb (0.0ms)
Rendered layouts/_admin_links.html.erb (3.0ms)
Rendered admin/datasets/index.html.erb within layouts/admin (5973.3ms)
Completed 200 OK in 5982ms (Views: 5419.4ms | ActiveRecord: 561.5ms)

(-- (here starts a second, identical request without no apparent reason) --)

Started GET "/admin/datasets" for 127.0.0.1 at 2012-11-06 09:20:47 -0700
  Processing by Admin::DatasetsController#index as HTML
Rendered admin/datasets/_set_field.html.erb (15.9ms)
Rendered admin/datasets/_set_field.html.erb (0.5ms)
(--  lots of these ok --)
Rendered admin/datasets/_dataset_category.html.erb (0.0ms)
Rendered admin/datasets/_dataset_category.html.erb (0.0ms)
Rendered layouts/_admin_links.html.erb (4.1ms)
Rendered admin/datasets/index.html.erb within layouts/admin (5944.9ms)
Completed 200 OK in 5955ms (Views: 5419.8ms | ActiveRecord: 549.8ms)

(-- here the browser gets the error 324, empty response --)

会議:

これは古典的な構成です:

upstream unicorn_server {
  # this socket is set up on the config/unicorn.rb file
  server unix:/home/sage/apps/sage/production/shared/.unicorn.sock;
}

server {
  listen       80; 

  root /home/sage/apps/sage/production/current/public;

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

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

}

server {
  listen       localhost:443; 
  listen       10.2.20.84:443; 

  ssl                  on;
  ssl_certificate      /etc/ssl/certs/cert.chained.crt;
  ssl_certificate_key  /etc/ssl/certs/cert.com.key;

  root /home/sage/apps/sage/production/current/public;

  location / {
    proxy_set_header X-Forwarded-For $scheme;
    proxy_set_header X-Forwarded-Proto https;
    proxy_set_header Host $http_host;
    proxy_redirect off;

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

正しい方向へのポインタは大歓迎です。

ありがとう!

4

1 に答える 1

0

どうでも、

犯人は、ファイアウォール内のスタック全体の前に座っていた haproxy でした。したがって、これらのタイムアウトを送信し、

于 2012-11-06T23:27:16.137 に答える