ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Несколько попыток подкл ючения к backend



Мне кажется что это немножко не то, а именно предположим что очередь входящих подключений для сокета достигла своего предела, тогда nginx сразу же вернет 502 без ожиданий.

Сейчас у нас напиан fcgi прокси на питоне с участием twisted framework, который ка раз и делает то что нам нужно, однако он довольно медленный и отнимает драгоценное время CPU. Вот я и думаю может существуют более скоростные решения?


PS: на самом деле этот прокси делает немного больше чем просто проксирование, а именно он ещё в зависимости от запрашиваемой страницы делает Http запросы на внешний адрес(таким образом мы выносим все ожидания сети из php)  сохраняет результат в php сессию ну и далее просто проксирует вызовы между nginx и php.
PSPS: чтобы было хоть немного более понятно чего же я хочу привожу код проксирующего метода

  @inlineCallbacks
  def proxy(self):
    try:
      self.transport.pauseProducing();

      l_client = protocol.ClientCreator(reactor, Proxy);
      l_attempts = 0;
      l_protocol = None;

      #устанавливаем соединение с реальным обработчиком (в нашем случае это php) пытаемся это сделать 3 раза
      while l_attempts < 15:
        if self.transport.connected:
          try:
            l_protocol = yield l_client.connectUNIX(self.factory.proxysock);
            break;

          except Exception as fail:
            l_attempts += 1;

            if l_attempts < 15:
              yield deferLater(reactor, 2, lambda:None);

        else:
          raise Exception("client disconected from soket before connection be proxed");

      else:
        raise Exception("Connection attemps excid");

      self.transport.resumeProducing();

      for chunk in self._chunks:
        l_protocol.transport.write(chunk);

      l_protocol._setPeer(self);
      self._setPeer(l_protocol);

    except Exception as fail:
      log.err("Can't proxy: %s" % (fail, ));
      self.transport.loseConnection();




22 октября 2010 г. 8:56 пользователь Alex Vorona <voron@xxxxxxxxxx> написал:
22.10.2010 02:03, ruslan usifov wrote:
А для fastcgi как задать timeout?
http://sysoev.ru/nginx/docs/http/ngx_http_fastcgi_module.html#fastcgi_connect_timeout


_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://nginx.org/mailman/listinfo/nginx-ru

_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.