blog banner

CentOS 7 安裝 WHM cPanel 與設定 Apache Tomcat ProxyPass / ProxyPassReverse

雖說在 Linux 的世界裡,完全使用指令介面管理是一種專業的表現,但是有的時候就是想多少方便偷懶一點,用網頁或多視窗介面來管理會比較直覺一點,而且既然主機商都免費贈送 WHM cPanel License 了,有多網域管理需求的話,這套系統是一個不錯的選擇,管理介面不僅井然有序,更重要的是還有官方提供的 Support Ticket 無限暢飲,當遇到難解的疑難雜症時,發個 Ticket 尋求一下專業便能茅塞頓開!

WHM cPanel 官網有提供 Demo,另外,也有提供 15 天的免費試用,有興趣的朋友可以前去了解一下。

回到正題,這次的筆記是從無到有的安裝與設定紀錄,基本上沒有太大的困難,照著指令步驟即可完成初步的安裝,本範例系統環境是 CentOS 7.7 ,作業系統的安裝過程就不在此贅述了:

步驟0. 安裝 CentOS 7:
我是租 VPS 主機,所謂的"安裝"也不過是做個勾選動作然後就完成了,租台主機花點錢能省事省時間~值得~

1. 先設定 hostname:
如果你只有一個 Domain 作為主站,建議可以先使用 Subdomain 來命名,比如:$hostname server.domain.com ,因為等會在 WHM 建立 cPanel 帳號cPanel 帳號時所使用的 Domain 名稱是不能跟 hostname 重複的。

2. 解除 SELinux:

$ sed -i s/SELINUX=enforcing/SELINUX=disabled/ /etc/selinux/config

因為等等要進行安裝 WHM/cPanel,必須解除相關的權限限制。

3. 解除 NetworkManager:
解除的原因一樣,是為了通過 WHM cPanel 的安裝限制。

$ systemctl stop NetworkManager.service
$ systemctl disable NetworkManager.service 

4. 安裝 WHM/cPanel:

$ cd /home && curl -o latest -L https://securedownloads.cpanel.net/latest && sh latest

…等待漫長的安裝過程,你可以守在螢幕面前或者裡用這點時間起來運動一下,
當看到這段訊息(版本號應該會是最新的)並回到指令輸入狀態時
Thank you for installing cPanel & WHM 11.82!
Removing /root/installer.lock.
表示安裝已完成!

5. 登入 WHM:
https://IP位置:2087 或 https://domain:2087
帳號 root 密碼就是作業系統 root 的密碼 。
第一次登入會有 Legal Documents 只要 Agree to All 即可,再來就是設定管理員 E-mail 和 Nameservers (Nameservers 可以先不理會之後再改設定也行),最後按下 Finish,即可進入 WHM 管理介面

6. 建立 cPanel 帳號:
點選主畫面下方或左選單 Create a New Account 功能。
Domain Information 相關的欄位要填寫的資料應該不用說明了吧?其他的欄位都用預設即可,有需要可依需求自行設定。

7. 安裝 Tomcat:
點選左側功能選單 EasyApache 4
進入功能頁面後,點 Currently Installed Packages 項目的 [Customize] 按鈕
點左側 Additional Packages,並且將 tomcat85 的狀態改為 Install ,然後按下一步 [Next],最後按 [Provision] 開始進行安裝,安裝完成後按下 [Done]


8. 啟用 Tomcat:
點選左側功能選單 Tomcat Manager ,把剛剛開設的 cPanel 帳號 Tomcat Status omcat Status 狀態改為 Enable

9. 設定 server.xml:

$ vi /home/jaxnoteddns/ea-tomcat85/conf/server.xml

原段落內容

<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="false" deployOnStartup="false" deployXML="false">

改為

<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" deployOnStartup="true" deployXML="true">

10. 重啟 TOMCAT:需要設定 ubic
先查看有 tomcat service 的用戶

$ /scripts/ea-tomcat85 list

已下將會用"jaxnoteddns"來作範例
使用 ubic 來控制用戶 tomcat 的啟動/關閉/重啟
*設定參考 https://forums.cpanel.net/resources/installation-and-configuration-of-ea-tomcat85.637/#2
*以下只要做過一次即可
*首先先切換到個別用戶

$ su - jaxnoteddns

修改 .bashrc

$ echo "export PATH=$(dirname $(readlink /usr/local/cpanel/3rdparty/bin/perl)):$PATH" >> /home/jaxnoteddns/.bashrc

執行完後登出回到 root

$ exit

在 root 用戶下查看個別用戶的 tomcat 狀態

$ su - jaxnoteddns -s /bin/bash -c 'ubic status ea-tomcat85'

查看該用戶 tomcat 使用 port

$ egrep 'Connector port.*HTTP' /home/jaxnoteddns/ea-tomcat85/conf/server.xml

重啟該用戶 tomcat 服務

$ su - jaxnoteddns -s /bin/bash -c 'ubic restart ea-tomcat85'

停止該用戶 tomcat 服務

$ su - jaxnoteddns -s /bin/bash -c 'ubic stop ea-tomcat85'

開啟該用戶 tomcat 服務

$ su - jaxnoteddns -s /bin/bash -c 'ubic start ea-tomcat85'

補充:root 帳號的 Tomcat 服務命令 (預設不啟動 root 的 tomcat 因為安全性((root容易被攻漏洞)))

$ sh /opt/cpanel/ea-tomcat85/bin/shutdown.sh
$ sh /opt/cpanel/ea-tomcat85/bin/startup.sh

11. 設定防火牆
在上一個步驟有提到如何查看用戶的 Tomcat port
將查詢到的 port 替換到下面的指令中即可
設定要開通的 port

$ firewall-cmd --zone=public --add-port=10000/tcp --permanent

重新載入防火牆設定

$ firewall-cmd --reload

確認是否有開通(有開通會回傳 yes)

$ firewall-cmd --query-port=10000/tcp

12. WHM Apache Tomcat ProxyPass 設定(以下僅為範例):
[ 環境 ]
用戶帳號 user
主網域 domain.com
子網域 tomcat.domain.com
Tomcat 運行網址 為 http://domain.com:10000 執行目錄為 /home/user/ea-tomcat85/webapps/ROOT/

[ 需求 ]
當輸入網址 http://tomcat.domain.com
會直接執行目錄 /home/user/ea-tomcat85/webapps/ROOT/tomcat
不需再使用帶 port 的網址 http://jaxnote.ddns.net:10000/tomcat/

[ 設定 ProxyPass ]
由於 WHM 採用 Easyapache4 的模組設定,所以不能直接編輯 /etc/apache2/conf/httpd.conf(設定會因為每次服務重啟而消失)
在 httpd.conf 文件內容就有提供詳細的說明,如何載入自訂設定,分別在設定區塊裡可以看到

<VirtualHost 103.17.9.142:80>
  ServerName tomcat.domain.com
  ...
  # Include "/etc/apache2/conf.d/userdata/std/2_4/user/tomcat.domain.com/*.conf"
  ...
</VirtualHost>

<VirtualHost 103.17.9.142:443>
  ServerName tomcat.domain.com
  ...
  # Include "/etc/apache2/conf.d/userdata/ssl/2_4/user/tomcat.domain.com/*.conf"
  ...
</VirtualHost>

只要在註解裡提到的對應目錄下,增加任何檔名.conf 檔案,即可載入自訂設定,在初始狀態下,上述目錄都不會存在,所以必須要先自行 mkdir -p ,本範例 std 與 sle 都建立名稱為 proxypass.conf 的檔案

$ vi /etc/apache2/conf.d/userdata/std/2_4/user/tomcat.domain.com/proxypass.conf
$ vi /etc/apache2/conf.d/userdata/ssl/2_4/user/tomcat.domain.com/proxypass.conf

且內容均為

<IfModule proxy_ajp_module>
        ProxyRequests On
        ProxyPass / http://domain.com:10000/tomcat/
        ProxyPassReverse / http://domain.com:10000/tomcat/
</IfModule>

存檔後, 要執行 httpd.conf 重建

$ /usr/local/cpanel/scripts/rebuildhttpdconf

重啟 Apache

$ /usr/local/cpanel/scripts/restartsrv_httpd

完成後到網址 http://tomcat.domain.com/
就可以看到是執行目錄 /ea-tomcat85/webapps/ROOT/tomcat
而不是 apache 服務下的 www/tomcat
同時 http://domain.com:10000/tomcat/ 一樣保有作用,而原本指向 apache 的 subdomain (tomcat.domain.com) 只能透過目錄網址的方式進入 https://domain.com/tomcat/

補充:Tomcat SSL 設置
直接使用 WHM AutoSSL + Apache 反向代理即可