1

我按照这篇文章有一个 Ubuntu Nginx、Rails 和 Thin 服务器,但是当我访问主页时,我得到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,但这不会在会话之间持续存在。

要永久解决它,您需要增加 ulimit。谷歌“too many open files ulimit”和你的操作系统以获取更多信息;每个操作系统的过程略有不同。

类似 Redhat 的系统

编辑/etc/security/limits.conf. 在底部,添加如下内容:

* 8192 8192

这将为所有用户同时设置 8192 个打开文件句柄的软和硬 ulimit。您需要重新启动才能使其生效,但您可以发出ulimit -n 8192立即为该会话的该用户应用该限制。

操作系统

有关如何在 OS X 平台上增加文件限制的详细说明, 请参阅此答案。

于 2012-09-29T21:29:58.550 回答