Связка nginx+passenger странно отдает JSON

Доброго времени суток.
Использовал связку nginx+unicorn, было все нормально. Решил попробовать nginx+passenger и внезапно появился странный баг.
Основную страницу и ресурсы (HTML, CSS, JS) сервер отдает нормально. Но если запросить через AJAX любой JSON-контент (типа /notes.json), то сервер ругается ошибкой «502 Bad Gateway». При этом если зайти браузером напрямую на тот же /notes.json, то данный отдаются нормально и статус «304 Not Modified». С Unicorn такого не было, появилось именно с Passenger.
Конфиг практически стандартный, брался отсюда.
Никто случайно не подскажет, что это за нафиг может быть?

Конфиг nginx:
user www-data;
worker_processes 4;
pid /run/nginx.pid;

events {
        worker_connections 768;
        # multi_accept on;
}

http {
        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        keepalive_timeout 65;
        types_hash_max_size 2048;

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

        access_log /srv/common/log/nginx.access.log;
        error_log /srv/common/log/nginx.error.log;

        gzip on;
        gzip_disable "msie6";

        passenger_root /usr/local/lib/ruby/gems/2.0.0/gems/passenger-4.0.5;
        passenger_ruby /usr/local/bin/ruby;

        server {
                server_name notes-test.com;
                listen 80;

                root /srv/notes-test.com/public;

                passenger_enabled on;
                rails_env development;
        }
}


В логах у nginx вот такие ошибки:

2013/06/08 15:18:24 [error] 28034#0: *213 upstream prematurely closed connection while reading response header from upstream, client: 188.186.31.209, server: notes-test.com, request: "GET /note_groups.json HTTP/1.1", upstream: "passenger:/tmp/passenger.1.0.28014/generation-0/request:", host: "notes-test.com", referrer: "http://notes-test.com/notes"
2013/06/08 15:18:24 [error] 28034#0: *212 upstream prematurely closed connection while reading response header from upstream, client: 188.186.31.209, server: notes-test.com, request: "GET /notes.json HTTP/1.1", upstream: "passenger:/tmp/passenger.1.0.28014/generation-0/request:", host: "notes-test.com", referrer: "http://notes-test.com/notes"
2013/06/08 15:19:21 [error] 28642#0: *17 upstream prematurely closed connection while reading response header from upstream, client: 188.186.31.209, server: notes-test.com, request: "GET /notes.json HTTP/1.1", upstream: "passenger:/tmp/passenger.1.0.28622/generation-0/request:", host: "notes-test.com", referrer: "http://notes-test.com/notes"
2013/06/08 15:19:21 [error] 28642#0: *20 upstream prematurely closed connection while reading response header from upstream, client: 188.186.31.209, server: notes-test.com, request: "GET /note_groups.json HTTP/1.1", upstream: "passenger:/tmp/passenger.1.0.28622/generation-0/request:", host: "notes-test.com", referrer: "http://notes-test.com/notes"


Вывод passenger-status --show=backtraces:

Thread 'MultiLibeio dispatcher' (0x2b0179484700, LWP 28626):
     (empty)

Thread 'Pool analytics collector' (0x2b01794c6700, LWP 28626):
     in 'static void Passenger::ApplicationPool2::Pool::collectAnalytics(Passenger::ApplicationPool2::PoolPtr)' (Pool.h:656)

Thread 'Pool garbage collector' (0x2b0179507700, LWP 28626):
     in 'static void Passenger::ApplicationPool2::Pool::garbageCollect(Passenger::ApplicationPool2::PoolPtr)' (Pool.h:541)

Thread 'MessageServer thread' (0x2b017b42d700, LWP 28626):
     in 'void Passenger::MessageServer::mainLoop()' (MessageServer.h:534)

Thread 'Pool event loop' (0x2b017bc2e700, LWP 28626):
     (empty)

Thread 'Request event loop' (0x2b017c42f700, LWP 28626):
     (empty)

Thread 'Group process spawner: /srv/notes-test.com#default' (0x2b017c4f2700, LWP 28635):
     in 'std::string Passenger::ApplicationPool2::Spawner::readMessageLine(Details&) [with Details = Passenger::ApplicationPool2::SmartSpawner::StartupDetails, std::string = std::basic_string<char>]' (Spawner.h:719)
     in 'std::string Passenger::ApplicationPool2::SmartSpawner::negotiatePreloaderStartup(Passenger::ApplicationPool2::SmartSpawner::StartupDetails&)' (SmartSpawner.h:558)
     in 'void Passenger::ApplicationPool2::SmartSpawner::startPreloader()' (SmartSpawner.h:206)
     in 'virtual Passenger::ApplicationPool2::ProcessPtr Passenger::ApplicationPool2::SmartSpawner::spawn(const Passenger::ApplicationPool2::Options&)' (SmartSpawner.h:744)
     in 'void Passenger::ApplicationPool2::Group::spawnThreadRealMain(const Passenger::ApplicationPool2::SpawnerPtr&, const Passenger::ApplicationPool2::Options&, unsigned int)' (Implementation.cpp:707)

Thread 'Background I/O capturer' (0x2b017c503700, LWP 30093):
     in 'void Passenger::ApplicationPool2::Spawner::BackgroundIOCapturer::capture()' (Spawner.h:132)

Thread 'MessageServer client thread 20' (0x2b017c67d700, LWP 28633):
     in 'virtual bool Passenger::BacktracesServer::processMessage(Passenger::MessageServer::CommonClientContext&, Passenger::MessageServer::ClientContextPtr&, const std::vector<std::basic_string<char> >&)' (BacktracesServer.h:48)
     in 'void Passenger::MessageServer::clientHandlingMainLoop(Passenger::FileDescriptor)' (MessageServer.h:467)
  • Вопрос задан
  • 5909 просмотров
Решения вопроса 1
ertaquo
@ertaquo Автор вопроса
Спасибо всем за наводки, включил лог у passenger'а и в нем увидел ошибку:
[ 2013-06-09 17:35:23.4363 23937/2b427687e700 Pool2/Implementation.cpp:1174 ]: [App 23978 stderr] /usr/local/lib/ruby/gems/2.0.0/gems/passenger-4.0.5/lib/phusion_passenger/rack/thread_handler_extension.rb:109:in `block in process_request': undefined method `each' for nil:NilClass (NoMethodError)
[ 2013-06-09 17:35:23.4363 23937/2b427687e700 Pool2/Implementation.cpp:1174 ]: [App 23978 stderr]       from /usr/local/lib/ruby/gems/2.0.0/gems/rack-1.4.5/lib/rack/utils.rb:398:in `block in each'
[ 2013-06-09 17:35:23.4363 23937/2b427687e700 Pool2/Implementation.cpp:1174 ]: [App 23978 stderr]       from /usr/local/lib/ruby/gems/2.0.0/gems/rack-1.4.5/lib/rack/utils.rb:397:in `each'
[ 2013-06-09 17:35:23.4363 23937/2b427687e700 Pool2/Implementation.cpp:1174 ]: [App 23978 stderr]       from /usr/local/lib/ruby/gems/2.0.0/gems/rack-1.4.5/lib/rack/utils.rb:397:in `each'
[ 2013-06-09 17:35:23.4364 23937/2b427687e700 Pool2/Implementation.cpp:1174 ]: [App 23978 stderr]       from /usr/local/lib/ruby/gems/2.0.0/gems/passenger-4.0.5/lib/phusion_passenger/rack/thread_handler_extension.rb:101:in `process_request'
[ 2013-06-09 17:35:23.4364 23937/2b427687e700 Pool2/Implementation.cpp:1174 ]: [App 23978 stderr]       from /usr/local/lib/ruby/gems/2.0.0/gems/passenger-4.0.5/lib/phusion_passenger/request_handler/thread_handler.rb:140:in `accept_and_process_next_request'
[ 2013-06-09 17:35:23.4364 23937/2b427687e700 Pool2/Implementation.cpp:1174 ]: [App 23978 stderr]       from /usr/local/lib/ruby/gems/2.0.0/gems/passenger-4.0.5/lib/phusion_passenger/request_handler/thread_handler.rb:108:in `main_loop'
[ 2013-06-09 17:35:23.4364 23937/2b427687e700 Pool2/Implementation.cpp:1174 ]: [App 23978 stderr]       from /usr/local/lib/ruby/gems/2.0.0/gems/passenger-4.0.5/lib/phusion_passenger/request_handler.rb:441:in `block (3 levels) in start_threads'

В файле /usr/local/lib/ruby/gems/2.0.0/gems/passenger-4.0.5/lib/phusion_passenger/rack/thread_handler_extension.rb на обозначенной строчке добавил проверку на nil и все заработало.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
Grigorieff
@Grigorieff
passenger_log_level 3;
passenger_debug_log_file /var/log/passenger.log;
Ответ написан
No_Time
@No_Time
Попробуйте как вот тут советют увеличить буффер.
Ответ написан
@jamesmalvi
use to json viewer to analyse your json data
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы