1

この記事に従って、Ubuntu Nginx、Rails、およびシンサーバーを用意しましたが、ホームページにアクセスする500 Internal Server Errorと、次のエラーログが表示されます。

2012/09/29 18:43:14 [alert] 15917#0: *1013 socket() failed (24: Too many open files) while connecting to upstream, client: 50.57.229.222, server: 50.57.229.222, request: "GET / HTTP/1.0", upstream: "http://50.57.229.222:80/", host: "50.57.229.222"

ここで何が起こっているのか分かりますか?

/etc/nginx/sites-enabled/gitwatcher.com はこちら:

upstream gitwatcher {
    server 127.0.0.1:3000;
    server 127.0.0.1:3001;
    server 127.0.0.1:3002;
}
server {
    listen   80;
    server_name  50.57.229.222;

    access_log /var/www/gitwatcher/log/access.log;
    error_log  /var/www/gitwatcher/log/error.log;
    root       /var/www/gitwatcher;
    index      index.html;

    location / {
        proxy_set_header  X-Real-IP  $remote_addr;
        proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header  Host $http_host;
        proxy_redirect    off;
        try_files /system/maintenance.html $uri $uri/index.html $uri.html @ruby;
    }

    location @ruby {
        proxy_pass http://50.57.229.222;
    }
}
4

3 に答える 3

2

nginx構成にループがあると思います。この部分は、ポート80でリッスンするように指示しています。

server {
    listen   80;
    server_name  50.57.229.222;
    [...]

しかし、後で、同じポートとIPアドレスにリクエストを転送すると言います。

location @ruby {
    proxy_pass http://50.57.229.222;
}

そのため、Nginxはリクエストを自分自身に転送することにしました。次に、新しいリクエストを自分自身に転送することを決定します。カーネルのファイル記述子をすべて使用するまで、以下同様です。

ほとんどの場合、シンサーバーは別のポートで実行されています。構成の後半のURLでそのポートを使用する必要があります。

于 2012-09-29T23:09:09.177 に答える
1

みんなに答えてくれてありがとう

とにかく、それはこの記事に従って解決された間違ったnginx confでした: http://articles.slicehost.com/2009/3/13/ubuntu-intrepid-nginx-rails-and-thin

于 2012-10-08T12:15:43.647 に答える
0

ここでのヒントは、エラー メッセージにあります。

1013 socket() failed (24: Too many open files) while connecting to upstream

これは、ulimit の問題が発生していることを意味している可能性があります (トラフィック レベルが低い場合は奇妙ですが、アプリの動作によっては非常に可能性があります)。

ulimit -n通常、開いているファイルハンドルの制限が表示されます。これは OS X ではかなり低く、多くの Linux 系システムでは通常 1024 です。(または同様の) Linux マシンで一時的に増やすことができますがulimit -n 8192、これはセッション間で永続的ではありません。

それを完全に解決するには、ulimits を上げたいと思うでしょう。「開いているファイルが多すぎます ulimit」とオペレーティング システムについては、Google で詳細情報を取得してください。手順はオペレーティング システムごとに若干異なります。

Redhat っぽいシステム

編集し/etc/security/limits.confます。下部に、次のようなものを追加します。

* 8192 8192

これにより、すべてのユーザーのソフトおよびハード ulimit が一度に 8192 の開いているファイル ハンドルに設定されます。これを有効にするには再起動する必要がありますが、 を発行ulimit -n 8192して、そのセッションのそのユーザーにその制限をすぐに適用できます。

OS X

OS X プラットフォームでファイルの ulimit を増やす方法の詳細な説明については、 この回答を参照してください。

于 2012-09-29T21:29:58.550 に答える