Конфигурация сервера Nginx для Thin, Faye и Redis

/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"

Запустил локальную установку пакета для редактирования развернутого проекта 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.


person Ostap Tan    schedule 17.07.2012    source источник


Ответы (2)


получил ту же ошибку, решил ее следующим образом:

сначала установите nginx_tcp_proxy_module

(Я следовал этому руководству, но изменил его, чтобы использовать пассажирский и тонкий с 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 – Проблема № 29

Теперь все работает кроме хрома как срабатывает 2 раза

(и мне нужен демон-процесс для распаковки)

надеюсь, это поможет и вам

person twetzel    schedule 22.07.2012
comment
Большое спасибо, но это не совсем то, что мне нужно. Я предполагаю, что моя ошибка где-то в апстриме, на сервере rails. Но не могу найти в чем проблема. Если я смогу хорошо начать Thin, я думаю, все должно быть в порядке. - person Ostap Tan; 24.07.2012

Я думаю, ваша проблема в том, что вы ставите свой сервер приложений и сервер faye в один и тот же апстрим!

Если я правильно понимаю метод upstream и бригадира, ваш первый посетитель получит приложение, второй faye и так далее. (может быть, я ошибаюсь, потому что я не знаю мастера ... но если мастер разделяет все доступные серверы на все службы, это может быть вашей проблемой)

Я говорю дерево, попробуйте капистрано вместо бригадира .. так что у вас есть полный контроль, какой сервер начинается, где .. потому что на моем хосте http не работает для private_pub (из-за nginx), поэтому мне пришлось установить nginx_tcp_proxy_module чтобы получить блок tcp работает в моем nginx.conf

или просто попробуйте сервер за сервером через ssh, чтобы найти ошибку

person twetzel    schedule 28.07.2012