首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ubuntu Nginx、Rails和Thin

Ubuntu Nginx、Rails和Thin
EN

Stack Overflow用户
提问于 2012-09-30 05:11:33
回答 3查看 5.2K关注 0票数 1

我按照这个article有一个Ubuntu Nginx,Rails,和瘦服务器,但当访问主页时,我得到500 Internal Server Error和以下错误日志:

代码语言:javascript
复制
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位于:

代码语言:javascript
复制
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;
    }
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-10-08 20:15:44

感谢你们的回答,

无论如何,下面的文章解决了一个错误的nginx conf:http://articles.slicehost.com/2009/3/13/ubuntu-intrepid-nginx-rails-and-thin

票数 1
EN

Stack Overflow用户

发布于 2012-09-30 07:09:09

我认为您的nginx配置中有一个循环。此部分说明在端口80上侦听:

代码语言:javascript
复制
server {
    listen   80;
    server_name  50.57.229.222;
    [...]

但是稍后,您可以说将请求转发到相同的端口和IP地址:

代码语言:javascript
复制
location @ruby {
    proxy_pass http://50.57.229.222;
}

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

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

票数 2
EN

Stack Overflow用户

发布于 2012-09-30 05:29:59

这里的提示在错误消息中:

代码语言:javascript
复制
1013 socket() failed (24: Too many open files) while connecting to upstream

这很可能意味着你遇到了ulimit问题(这在低流量水平下很奇怪,但很有可能,这取决于应用程序正在做什么)。

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

要永久解决这个问题,您需要设置您的ulimits。谷歌搜索“打开的文件太多ulimit”和你的操作系统,以获得更多信息;每个操作系统的程序略有不同。

Redhat-ish系统

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

代码语言:javascript
复制
* 8192 8192

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

OS X

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12656524

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档