為什麼passenger-install-nginx-module既沒有安裝Nginx,也沒有在Centos7上實現Passenger支持,而輸出顯示相反?
介紹
目前大約有 100 個 Puppet 代理連接到 Puppetmaster。有時需要一段時間才能被代理接收到 Puppetmaster 上實施的更改。一些資訊發現,Passenger 與 Web 伺服器相結合,例如 Apache2 或 Nginx 可以加速這個過程。最重要的是,根據本文件,強烈建議在生產環境中使用此類功能。
目標
目的是在 CentOS7 上安裝 Nginx 並實施 Phusion Passenger 支持,
passenger-install-nginx-module
以加速辨識 Puppet-agents 在 Puppetmaster 上實施的更改。嘗試
嘗試 1
sudo /usr/local/share/gems/gems/passenger-4.0.56/bin/passenger-install-nginx-module --auto --auto-download
執行並遵循安裝步驟。嘗試 2
由於在嘗試 1 期間未安裝 Nginx 服務,因此使用
yum -y install nginx
.嘗試 3
Google搜尋:
"[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
為了測試此問題是否在使用另一個 Web 伺服器時也
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 狀態應該返回 true,因為 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; ... }
使用 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.
嘗試安裝另一個帶有乘客支持的 Web 伺服器會導致:
* Checking for Apache 2... Found: no * Checking for Apache 2 development headers... Found: no
這表明
passenger-install-apache2-module
與passenger-install-nginx-module
似乎檢查是否已安裝 Web 伺服器相反。
我是 Phusion 乘客的作者。你從根本上誤解了關於 Nginx 的一些東西。
首先,Nginx 不支持動態載入模組。這意味著擴展 Nginx 的唯一方法是從頭開始重新編譯 Nginx,並包含某些模組。
在您的心智模型中,您似乎認為在
passenger-install-nginx-module
某處安裝一個模組文件,yum install nginx
然後在某處安裝一個 Nginx 實例,然後載入乘客模組。這是錯誤的。passenger-install-nginx-module
從頭開始編譯一個全新的 Nginx,啟用 Passenger 模組並在其中靜態連結。根據你給它的參數(最明顯的是安裝前綴),你最終會得到一個完全獨立的 Nginx 安裝——一個完全獨立於你用 yum 安裝的那個。這在乘客 wiki 上有大量記錄:為什麼乘客不能擴展我的 Nginx?. 這不是我們——Passenger 的作者——決定的。這就是 Nginx 本身的基本工作方式,我們無法改變這一點。安裝任何Nginx 模組都是這樣的。它與 Apache 模組形成鮮明對比,Apache 模組確實按照您認為的方式工作。
其次,您似乎假設安裝 Nginx 服務是由Passenger 負責的。這是錯誤的。服務定義完全是特定於平台的,甚至是特定於發行版的附加組件,由發行版的打包程序添加。服務定義既不包含在 Nginx 原始碼中,也不由Passenger 安裝。因此,如果您從原始碼(而不是 RPM)安裝Passenger/Nginx,那麼您必須自己安裝服務定義。手冊中有一節介紹了這一點。