适用于Thin,Faye& Sn的Nginx服务器配置Redis的

时间:2012-07-17 15:25:52

标签: ruby-on-rails nginx thin faye foreman

/etc/nginx/nginx.conf看起来像:

user  deploy;
worker_processes  5;

error_log  logs/error.log;

events {
    worker_connections  1024;
    use epoll;
}

http {

    include       mime.types;
    default_type  application/octet-stream;


    sendfile        on;

    keepalive_timeout  65;

    upstream foreman4000 {
        server x.x.x.x:4000;
        server x.x.x.x:4001;
        server x.x.x.x:4002;
        server x.x.x.x:4003;
        server x.x.x.x:4004;
    } 

   server {
      listen       80;
      server_name  x.x.x.x;    #server IP
      access_log  /opt/nginx/foreman4000.access.log;
      location / {
        proxy_pass http://foreman4000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
      }
   }
}

这里我使用gem foreman,它使用upstart管理所有进程并使用一个命令启动所有服务器

我在项目的主目录中创建了Procfile,其中包含:

redis:  redis-server
thin:   bundle exec thin start -p $PORT
faye:   rackup faye.ru -E production -s thin

添加到Gemfile:

gem 'foreman'
gem 'thin'
gem "foreman-export-daemontools", "~> 0.0.1"

在本地Ran捆绑安装以编辑Gemfile.lock 在服务器上部署项目。

开始使用Nginx

deploy@dcards101:/opt/nginx/conf$ sudo /etc/init.d/nginx stop   [ OK ]
deploy@dcards101:/opt/nginx/conf$ sudo /etc/init.d/nginx srart  [ OK ]

从Procfile导出数据到Upstart

deploy@dcards101:/var/www/cards/current$ rvmsudo foreman export upstart -a cards -u root

开始申请

deploy@dcards101:/var/www/cards/current$ rvmsudo start cards

现在一切都必须好,但我在服务器上看到的只是

502 Bad Gateway

nginx/1.0.15

日志说:

2012/07/17 17:22:30 [error] 11593#0: *148 no live upstreams while connecting to upstream, client: x.x.x.x, server: x.x.x.x, request: "GET / HTTP/1.1", upstream: "http://foreman4000/", host: "x.x.x.x"

请尽可能帮助您。服务器 - Ubuntu 10 LTS。

2 个答案:

答案 0 :(得分:0)

得到同样的错误就这样解决了:

首先安装nginx_tcp_proxy_module

(我遵循this教程,但改为使用乘客和瘦身nginx)

将tcp部分添加到你的nginx.conf:

tcp {
    upstream websockets {
        ## node processes
        server 12.34.56.78:9292; 
        check interval=300 rise=2 fall=5 timeout=1000;
    }   

    server {
        listen 9200;
        server_name domain.org;
        tcp_nodelay on;
        proxy_pass websockets;
    }
}

对我来说不适用于端口80

之后我仍然得到faye / privat_pub的空回复,但是有一个极其微不足道的解决方案:

RAILS_ENV=production bundle exec rackup private_pub.ru -s thin -E production

private_pub - Issue #29

现在一切正常,除了镀铬如何点火2次

(我需要一个架子的守护程序)

希望它也能帮到你

答案 1 :(得分:0)

我认为您的问题是您将app-server和faye服务器放在同一个上游!

如果我得到了上游和领班的方法,你的第一个访问者得到第二个王子的应用程序,依此类推。 (也许我错了,因为我不认识工头......但如果工头将所有可用的服务器共享给所有服务,那可能是你的问题)

我木头说尝试capistrano而不是工头..所以你完全控制哪个服务器从哪里开始..因为在我的主机http不要为private_pub工作(因为nginx)所以我不得不安装nginx_tcp_proxy_module来获取在我的nginx.conf中运行的tcp块

或者只是通过服务器通过ssh尝试服务器来查找错误