Ubuntu Nginx,Rails和Thin

时间:2012-09-29 21:11:33

标签: ruby-on-rails ruby proxy nginx thin

我跟着这个article有一个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;
    }
}

3 个答案:

答案 0 :(得分:2)

我认为你的nginx配置中有一个循环。这部分说要听80端口:

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

但是后来,你说要将请求转发到同一个端口和IP地址:

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

因此Nginx决定将请求转发给自己。然后它决定将新请求转发给自己。所以依此类推,直到你使用了所有内核的文件描述符。

最有可能的是,您的瘦服务器在不同的端口上运行。您需要在配置的后一位使用URL中的该端口。

答案 1 :(得分:1)

感谢回答那些人,

无论如何,通过以下文章解决了错误的nginx配置:http://articles.slicehost.com/2009/3/13/ubuntu-intrepid-nginx-rails-and-thin

答案 2 :(得分:0)

此处的提示位于错误消息中:

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

这可能意味着您遇到了ulimit问题(在低流量级别时很奇怪,但很可能,这取决于应用程序正在做什么)。

ulimit -n通常会向您显示打开文件句柄的限制。我认为这在OS X上相当低,在许多Linux风格的系统上通常为1024。您可以在ulimit -n 8192(或类似)的Linux计算机上临时增加它,但这不会在会话中保持不变。

要永久解决它,你需要提升你的ulimits。谷歌为“太多开放文件ulimit”和你的操作系统获取更多信息;每个操作系统的程序略有不同。

Redhat-ish系统

修改/etc/security/limits.conf。在底部,添加如下内容:

* 8192 8192

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

OS X

有关如何在OS X平台上增加文件ulimits的详细说明,请参阅this answer