我跟着这个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;
}
}
答案 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”和你的操作系统获取更多信息;每个操作系统的程序略有不同。
修改/etc/security/limits.conf
。在底部,添加如下内容:
* 8192 8192
这将为所有用户一次设置8192个打开文件句柄的软ulim和hard ulimits。您需要重新启动才能使此功能生效,但您可以发出ulimit -n 8192
以立即为该会话的该用户应用该限制。
有关如何在OS X平台上增加文件ulimits的详细说明,请参阅this answer。