nginx + пассажир + рельсы 3.1 = 502 плохой шлюз? - PullRequest
3 голосов
/ 06 июня 2011

У меня последняя версия Nginx, работающая с Passenger, SQLite и Rails 3.1. Почему-то, когда у меня некоторое время работает Passenger, я получаю сообщение об ошибке «502 bad gateway» при посещении моего сайта.

Вот фрагмент из моего журнала ошибок Nginx:

2011/06/27 08:55:33 [error] 20331#0: *11270 upstream prematurely closed connection while reading response header from upstream, client: xxx.xxx.xx.x, server: www.example.com, request: "GET / HTTP/1.1", upstream: "passenger:unix:/passenger_helper_server:", host: "example.com"
2011/06/27 08:55:47 [info] 20331#0: *11273 client closed prematurely connection, so upstream connection is closed too while sending request to upstream, client: xxx.xxx.xx.x, server: www.example.com, request: "GET / HTTP/1.1", upstream: "passenger:unix:/passenger_helper_server:", host: "example.com"

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

Thread 'Client thread 7':
 in 'Passenger::FileDescriptor Client::acceptConnection()' (HelperAgent.cpp:160)
 in 'void Client::threadMain()' (HelperAgent.cpp:603)

Thread 'Client thread 10':
 in 'Passenger::FileDescriptor Client::acceptConnection()' (HelperAgent.cpp:160)
 in 'void Client::threadMain()' (HelperAgent.cpp:603)

Thread 'Client thread 11':
 in 'Passenger::FileDescriptor Client::acceptConnection()' (HelperAgent.cpp:160)
 in 'void Client::threadMain()' (HelperAgent.cpp:603)

Thread 'Client thread 12':
 in 'Passenger::FileDescriptor Client::acceptConnection()' (HelperAgent.cpp:160)
 in 'void Client::threadMain()' (HelperAgent.cpp:603)

Thread 'Client thread 13':
 in 'Passenger::FileDescriptor Client::acceptConnection()' (HelperAgent.cpp:160)
 in 'void Client::threadMain()' (HelperAgent.cpp:603)

Thread 'Client thread 14':
 in 'Passenger::FileDescriptor Client::acceptConnection()' (HelperAgent.cpp:160)
 in 'void Client::threadMain()' (HelperAgent.cpp:603)

Thread 'Client thread 15':
 in 'Passenger::FileDescriptor Client::acceptConnection()' (HelperAgent.cpp:160)
 in 'void Client::threadMain()' (HelperAgent.cpp:603)

Thread 'Client thread 16':
 in 'Passenger::FileDescriptor Client::acceptConnection()' (HelperAgent.cpp:160)
 in 'void Client::threadMain()' (HelperAgent.cpp:603)

Thread 'Client thread 17':
 in 'Passenger::FileDescriptor Client::acceptConnection()' (HelperAgent.cpp:160)
 in 'void Client::threadMain()' (HelperAgent.cpp:603)

Thread 'Client thread 18':
 in 'Passenger::FileDescriptor Client::acceptConnection()' (HelperAgent.cpp:160)
 in 'void Client::threadMain()' (HelperAgent.cpp:603)

Thread 'Client thread 19':
 in 'Passenger::FileDescriptor Client::acceptConnection()' (HelperAgent.cpp:160)
 in 'void Client::threadMain()' (HelperAgent.cpp:603)

Thread 'Client thread 20':
 in 'Passenger::FileDescriptor Client::acceptConnection()' (HelperAgent.cpp:160)
 in 'void Client::threadMain()' (HelperAgent.cpp:603)

Thread 'Client thread 21':
 in 'Passenger::FileDescriptor Client::acceptConnection()' (HelperAgent.cpp:160)
 in 'void Client::threadMain()' (HelperAgent.cpp:603)

Thread 'Client thread 22':
 in 'Passenger::FileDescriptor Client::acceptConnection()' (HelperAgent.cpp:160)
 in 'void Client::threadMain()' (HelperAgent.cpp:603)

Thread 'Client thread 23':
 in 'Passenger::FileDescriptor Client::acceptConnection()' (HelperAgent.cpp:160)
 in 'void Client::threadMain()' (HelperAgent.cpp:603)

Thread 'Client thread 24':
 in 'Passenger::FileDescriptor Client::acceptConnection()' (HelperAgent.cpp:160)
 in 'void Client::threadMain()' (HelperAgent.cpp:603)

Thread 'MessageServer thread':
 in 'void Passenger::MessageServer::mainLoop()' (MessageServer.h:537)

Thread 'MessageServer client thread 35':
 in 'virtual bool Passenger::BacktracesServer::processMessage(Passenger::MessageServer::CommonClientContext&, boost::shared_ptr<Passenger::MessageServer::ClientContext>&, const std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&)' (BacktracesServer.h:47)
 in 'void Passenger::MessageServer::clientHandlingMainLoop(Passenger::FileDescriptor&)' (MessageServer.h:470)

Это то, что показывает мой passenger-memory-stats

---------- Nginx processes ----------
PID    PPID   VMSize   Private  Name
-------------------------------------
16291  1      35.4 MB  0.1 MB   nginx: master process /home/apps/.nginx/sbin/nginx
16292  16291  36.0 MB  0.8 MB   nginx: worker process
16293  16291  35.8 MB  0.5 MB   nginx: worker process
16294  16291  35.8 MB  0.5 MB   nginx: worker process
16295  16291  35.8 MB  0.5 MB   nginx: worker process
### Processes: 5
### Total private dirty RSS: 2.46 MB


----- Passenger processes ------
PID    VMSize    Private   Name
--------------------------------
16251  87.0 MB   0.3 MB    PassengerWatchdog
16254  100.4 MB  1.3 MB    PassengerHelperAgent
16256  41.6 MB   5.7 MB    Passenger spawn server
16259  134.8 MB  0.8 MB    PassengerLoggingAgent
18390  770.4 MB  17.1 MB   Passenger ApplicationSpawner: /home/apps/manager/current
18415  853.3 MB  147.7 MB  Rack: /home/apps/manager/current
18424  790.5 MB  57.2 MB   Rack: /home/apps/manager/current
18431  774.7 MB  18.7 MB   Rack: /home/apps/manager/current
### Processes: 8
### Total private dirty RSS: 248.85 MB

Кажется, есть проблема с моей связью между Пассажиром и Nginx?

Кроме того, при просмотре журналов Rails становится ясно, что запрос вообще не достигает Rails, поскольку в журналах нет записей о посещениях, которые получают ошибку 502. Поэтому моя первоначальная мысль о том, что что-то не так с любым промежуточным программным обеспечением Rack, не должна быть возможной.

Ответы [ 5 ]

2 голосов
/ 06 июня 2011

"V" в ВМ - для Виртуального .См. Также ответы на другие вопросы SO, например, Использование виртуальной памяти из Java под Linux, слишком много используемой памяти .

Эти лучшие 147 МБ не намекают ни на что необычное.Ваши 502 ошибки означают, что с рабочими процессами с точки зрения Пассажира что-то не так.Вам следует проверить файлы журналов Rails & Nginx на наличие подсказок и, возможно, passenger-status --show=backtraces.

1 голос
/ 03 декабря 2012

Я только что встретил такую ​​смертельную «ошибку 502 Bad Gateway», о которой сообщает nginx, веб-стек - Ubuntu 12.04 + Rails 3.2.9 + Passenger 3.0.18 + nginx 1.2.4, у меня ушло 2 часа на поиск основной причины:

Моему приложению rails не требуется поддержка базы данных, поэтому я просто удалил gem 'sqlite3' в Gemfile, он отлично работает в режиме разработки, но в рабочем режиме приведет 502 Bad Gateway.

Итакпосле добавления обратно gem 'sqlite3' в Gemfile такая ошибка 502 Bad Gateway исчезает ....

1 голос
/ 06 января 2012

Попробуйте установить passenger_spawn_method conservative - очевидно, есть проблемы с настройками разветвления Passenger по умолчанию и Rails 3.1

0 голосов
/ 27 июня 2014

Это было то же самое для меня в Rails 4, но я добавил «SECRETKEYBASE» в /confirg/secrets.yml

production:
secretkeybase: # add yours here
0 голосов
/ 11 февраля 2012

У меня была такая же проблема, и в моем случае это помогло увеличить настройку passenger_max_pool_size в файле конфигурации Nginx.

Может быть, вы также можете посмотреть следующие сообщения, которые также помогли мне найти эторешение:

...