Назад | Перейти на главную страницу

Почему пассажирский-install-nginx-module не устанавливает Nginx и не реализует поддержку Passenger на Centos 7, в то время как выходные данные указывают на обратное?

Введение

На данный момент к Puppetmaster подключено около 100 агентов Puppet. Иногда требуется некоторое время, прежде чем изменения, внесенные в Puppetmaster, будут приняты агентами. Была обнаружена некоторая информация о том, что Passenger объединен с веб-сервером, например Apache2 или Nginx могут ускорить этот процесс. Прежде всего, по мнению эта документация Настоятельно рекомендуется использовать такие функции в производственных средах.


Цель

Цель состоит в том, чтобы установить Nginx и реализовать поддержку Phusion Passenger на CentOS7, используя passenger-install-nginx-module для ускорения распознавания изменений, внесенных в Puppetmaster агентами Puppet.


Попытки

Попытка 1

sudo /usr/local/share/gems/gems/passenger-4.0.56/bin/passenger-install-nginx-module --auto --auto-download был выполнен, и шаги по установке были соблюдены.

Попытка 2

Поскольку служба Nginx не была установлена ​​во время попытки 1, она была установлена ​​с использованием yum -y install nginx.

Попытка 3

Гугл: "[emerg] unknown directive passenger_enabled" указал, что nginx был скомпилирован без поддержки Phusion Passenger. В этом случае это должно быть неверно, так как passenger-install-nginx-module был запущен, и вывод установки во время попытки 1 показал, что Nginx должен быть установлен.

Попытка 4

/etc/nginx/nginx.conf

passenger_root  /usr/local/share/gems/gems/passenger-4.0.56;
passenger_ruby  /usr/bin/ruby;

/etc/nginx/conf.d/puppet.conf

passenger_enabled          on;

Попытка 5

Чтобы проверить, возникает ли эта проблема, с использованием другого веб-сервера sudo /usr/local/share/gems/gems/passenger-4.0.56/bin/passenger-install-apache2-module был выполнен.


Ожидаемый результат

Выполнение passenger-install-nginx-module и завершение шагов установки устанавливает Nginx. Служба Nginx может быть запущена, и поддержка Phusion-Passenger включена. Проверка того, находится ли порт 8140 в состоянии LISTEN, должна привести к истинному результату, поскольку Nginx должен запустить Puppetmaster.


Текущий результат

Выполнение passenger-install-nginx-module и завершение шагов установки не устанавливает Nginx, в то время как выходные данные указывают на обратное.

Nginx with Passenger support was successfully installed.

Please edit your Nginx configuration file (probably /opt/nginx/conf/nginx.conf),
and set the passenger_root and passenger_ruby configuration options in the
'http' block, like this:

  http {
      ...
      passenger_root /usr/local/share/gems/gems/passenger-4.0.56;
      passenger_ruby /usr/bin/ruby;
      ...
  }

Установка Nginx с помощью yum тоже не работает. Проблема сохраняется, даже если passenger-install-nginx-module выполняется снова.

[vagrant@vm-one ~]$ sudo systemctl status nginx.service -l                        
   nginx.service - The nginx HTTP and reverse proxy server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled)
   Active: failed (Result: exit-code) since Thu 2015-01-01 01:55:56 UTC; 
  2min 19s ago
  Process: 7963 ExecStop=/bin/kill -s QUIT $MAINPID (code=exited, status=0/
  SUCCESS)
  Process: 7935 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS)
  Process: 10814 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=1/FAILURE)
 Main PID: 7937 (code=exited, status=0/SUCCESS)

Jan 01 01:55:56 vm-one.local systemd[1]: Starting The nginx HTTP and reverse 
proxy server...
Jan 01 01:55:56 vm-one.local nginx[10814]: nginx: [emerg] unknown directive
 "passenger_enabled" in /etc/nginx/conf.d/puppet.conf:5
Jan 01 01:55:56 vm-one.local nginx[10814]: nginx: configuration file /etc/nginx
 /nginx.conf test failed
Jan 01 01:55:56 vm-one.local systemd[1]: nginx.service: control process exited,
 code=exited status=1
Jan 01 01:55:56 vm-one.local systemd[1]: Failed to start The nginx HTTP and
reverse proxy server.
Jan 01 01:55:56 vm-one.local systemd[1]: Unit nginx.service entered failed state.

Попытка установить другой веб-сервер с поддержкой Passenger приводит к:

 * Checking for Apache 2...
      Found: no
 * Checking for Apache 2 development headers...
      Found: no

Это указывает на то, что passenger-install-apache2-module в отличие от passenger-install-nginx-module кажется, проверяет, установлен ли веб-сервер или нет.

Я автор Phusion Passenger. Вы неправильно понимаете что-то в основе Nginx.

Во-первых, Nginx не поддерживает динамически загружаемые модули. Это означает, что единственный способ расширить Nginx - это перекомпилировать Nginx с нуля с некоторыми включенными модулями.

В своей ментальной модели вы, кажется, думаете, что passenger-install-nginx-module устанавливает где-нибудь файл модуля, и это yum install nginx где-то устанавливает экземпляр Nginx, который затем загружает модуль Passenger. Это неправда. passenger-install-nginx-module компилирует совершенно новый Nginx с нуля, с включенным модулем Passenger и статически связанным внутри него. В зависимости от заданных вами параметров (в первую очередь, префикса установки) вы получите полностью отдельную установку Nginx - ту, которая полностью независима от той, которую вы устанавливаете с помощью yum.

Это подробно описано в вики-странице Passenger: Почему Passenger не может продлить мой Nginx?. Это не то, что мы, авторы Passenger, решили. Так работает сам Nginx, и мы не можем это изменить. Установка любой Модуль Nginx выглядит так. Это резко контрастирует с модулями Apache, которые работают так, как вы думаете.

Во-вторых, вы, похоже, полагаете, что Passenger позаботится об установке службы Nginx. Это неправда. Определения служб полностью зависят от платформы и даже надстройки для конкретного дистрибутива, добавляемые упаковщиками дистрибутива. Определения сервисов не включены в исходный код Nginx и не установлены Passenger. Таким образом, если вы устанавливаете Passenger / Nginx из исходного кода (в отличие от RPM), вы должны сами установить определения служб. Об этом есть раздел в руководстве.