web-dev-qa-db-ja.com

出力が反対を示しているのに、passenger-install-nginx-moduleがNginxをインストールせず、Centos7にPassengerサポートを実装しないのはなぜですか?

はじめに

現在、Puppetmasterに接続しているPuppetエージェントは約100人います。 Puppetmasterに実装された変更がエージェントによって取得されるまでに時間がかかる場合があります。乗客がウェブサーバーと組み合わせたという情報がいくつか見つかりました。 Apache2またはNginxは、このプロセスを加速する可能性があります。とりわけ、 このドキュメント によると、本番環境でこのような機能を使用することを強くお勧めします。


目的

目的は、Nginxをインストールし、passenger-install-nginx-moduleを使用してCentOS7にPhusionPassengerサポートを実装し、Puppet-agentsによってPuppetmasterに実装された変更の認識を加速することです。


試行

試行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がインストールされている必要があることを示しているため、これはfalseである必要があります。

試行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

この問題が別のWebサーバーを使用して発生するかどうかをテストするために、Sudo /usr/local/share/gems/gems/passenger-4.0.56/bin/passenger-install-Apache2-moduleが実行されました。


期待される結果

passenger-install-nginx-moduleを実行し、インストール手順を完了すると、Nginxがインストールされます。 Nginxサービスを開始でき、Phusion-Passengerサポートが含まれています。 NginxがPuppetmasterを起動する必要があるため、ポート8140がLISTEN状態にあるかどうかを確認するとtrueになります。


現在の結果

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;
      ...
  }

Yumを使用したNginxのインストールも機能しません。 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サポート付きの別のWebサーバーをインストールしようとすると、次の結果になります。

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

これは、passenger-install-Apache2-moduleとは対照的にpassenger-install-nginx-moduleがWebサーバーがインストールされているかどうかをチェックしているように見えることを示しています。

2
030

私はPhusionPassengerの著者です。あなたはNginxについて根本的に何かを誤解しています。

まず第一に、Nginxは動的にロード可能なモジュールをサポートしていません。つまり、Nginxを拡張する唯一の方法は、特定のモジュールを含めてNginxを最初から再コンパイルすることです。

あなたのメンタルモデルでは、あなたはpassenger-install-nginx-moduleどこかにモジュールファイルをインストールし、それはyum install nginx Nginxインスタンスをどこかにインストールし、Passengerモジュールをロードします。これは誤りです。 passenger-install-nginx-moduleは、Passengerモジュールを有効にして静的にリンクした状態で、まったく新しいNginxを最初からコンパイルします。指定したパラメーター(特にインストールプレフィックス)に応じて、完全に別個のNginxインストールが作成されます。これは、yumを使用してインストールするものとは完全に独立しています。

これはPassengerwikiに広範囲に文書化されています: Passengerが私のNginxを拡張できないのはなぜですか? 。これは、私たち(乗客の作者)が決定したものではありません。これがNginx自体の基本的な動作方法であり、これを変更することはできません。 anyNginxモジュールのインストールは次のようになります。これは、Apacheモジュールとはまったく対照的です。Apacheモジュールは、思ったとおりに機能します。

第二に、あなたはNginxサービスのインストールがPassengerの面倒を見るものであるという仮定の下にあるようです。これは誤りです。サービス定義は完全にプラットフォーム固有であり、ディストリビューション固有のアドオンであり、ディストリビューションのパッケージャーによって追加されます。サービス定義は、Nginxソースコードに含まれておらず、Passengerによってインストールされていません。したがって、(RPMではなく)ソースからPassenger/Nginxをインストールする場合は、サービス定義を自分でインストールする必要があります。 これについてはマニュアルにセクションがあります。

6
Hongli Lai