這裡記錄我在 CentOS Linux 中安裝 Apache2 與 Tomcat8 伺服器的指令以及整合設定步驟。
Tomcat 配合 Apache 網頁伺服器,可以讓一台機器同時提供 Java 與 PHP 的執行環境,以下是在 CentOS Linux 中安裝 Apache 2 與 Tomcat 8 的步驟。
安裝 Apache 網頁伺服器
以 yum
安裝 Apache 網頁伺服器:
sudo yum install httpd
將 Apache 伺服器設定為開機自動啟動:
sudo systemctl enable httpd.service
立即啟動 Apache 伺服器:
sudo systemctl start httpd.service
檢查 Apache 伺服器的狀態:
sudo systemctl status httpd.service
HTTPS 加密網頁
若要讓 Apache 伺服器提供 HTTPS 安全加密網頁,可以安裝 nss
模組:
sudo yum install mod_nss
編輯 nss
模組的 /etc/httpd/conf.d/nss.conf
設定檔,把預設的 8443
連接埠改為標準的 443
:
# # When we also provide SSL we have to listen to the # standard HTTP port (see above) and to the HTTPS port # # Note: Configurations that use IPv6 but not IPv4-mapped addresses need two # Listen directives: "Listen [::]:8443" and "Listen 0.0.0.0:443" # Listen 443 # [略] ## ## SSL Virtual Host Context ## <VirtualHost _default_:443>
其餘的設定則依照自己的需求修改。接著重新啟動 Apache 伺服器,讓設定生效:
sudo systemctl restart httpd.service
安裝完成後,請開啟瀏覽器,輸入伺服器的網址,檢查網頁是否正常,正常來說可以看到 Apache 的測試網頁。
安裝 Tomcat 伺服器
首先用 yum
安裝 Java SDK 1.8:
sudo yum install java-1.8.0-openjdk-devel
新增 tomcat
使用者群組:
sudo groupadd tomcat
新增 tomcat
使用者帳號:
sudo useradd -M -s /bin/nologin -g tomcat -d /opt/tomcat tomcat
由於 tomcat
這個帳號是專門用來執行 Tomcat 服務的帳號,所以不會有登入系統使用的情況,因此可將其登入的 shell 設定為 /bin/nologin
,禁止該帳號登入,以增加系統安全性。
而 -d
是設定帳號的家目錄,這裡的 /opt/tomcat
就是等一下我們要安裝 Tomcat 的路徑,如果您想要把 Tomcat 安裝在不同的位置,可以自行修改這個路徑。
設定完 tomcat
帳號之後,接著就可以安裝 Tomcat 伺服器,首先從 Tomcat 官方網站下載 Tomcat 8 的 Binary Distributions:
wget http://ftp.tc.edu.tw/pub/Apache/tomcat/tomcat-8/v8.5.28/bin/apache-tomcat-8.5.28.tar.gz
建立安裝 Tomcat 的目錄,這裡我們將 Tomcat 安裝在 /opt/tomcat
中,首先建立這個目錄:
sudo mkdir /opt/tomcat
將 Tomcat 8 的壓縮檔解壓縮至該目錄中:
sudo tar xvf apache-tomcat-8*tar.gz -C /opt/tomcat --strip-components=1
設定檔案權限:
cd /opt/tomcat sudo chgrp -R tomcat * sudo chmod g+rwx conf sudo chmod -R g+r conf
有些目錄需要讓 Tomcat 寫入資料,必須將目錄的擁有者改為 tomcat
:
sudo chown -R tomcat webapps/ work/ temp/ logs/
建立 /etc/systemd/system/tomcat.service
這個 Systemd 的設定檔:
sudo vi /etc/systemd/system/tomcat.service
檔案內容如下:
# Systemd unit file for tomcat [Unit] Description=Apache Tomcat Web Application Container After=syslog.target network.target [Service] Type=forking Environment=JAVA_HOME=/usr/lib/jvm/jre Environment=CATALINA_PID=/opt/tomcat/temp/tomcat.pid Environment=CATALINA_HOME=/opt/tomcat Environment=CATALINA_BASE=/opt/tomcat Environment='CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC' Environment='JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom' ExecStart=/opt/tomcat/bin/startup.sh ExecStop=/bin/kill -15 $MAINPID User=tomcat Group=tomcat [Install] WantedBy=multi-user.target
存檔之後,要重新載入 Systemd,讓新的 Tomcat 設定檔生效:
sudo systemctl daemon-reload
將 Tomcat 伺服器設定為開機自動啟動:
sudo systemctl enable tomcat
立即啟動 Tomcat 服務:
sudo systemctl start tomcat
如果要停止 Tomcat 服務,則執行:
sudo systemctl stop tomcat
整合 Apache 與 Tomcat 伺服器
正常來說 Apache 的網頁伺服器會使用 80
連接埠,而 Tomcat 會使用 8080
,如果不想要使用連接埠來區分 Apache 與 Tomcat,可以透過 Apache 的 Proxy 設定,將某些網頁路徑導向至 Tomcat 伺服器,而對外則統一使用標準的 80
連接埠,而加密的 HTTPS 網頁則使用 443
,這樣可以讓網址看起來比較漂亮,不會多出連接埠號。
Apache 的 proxy
模組可以讓外部的連線從 Apache 導向至內部的 Tomcat 伺服器,這裡我示範將 HTTPS 加密的所有連線都預設導向至 Tomcat,而 /static/
這個路徑下的網頁則維持不變(由 Apache 處理)。
編輯 /etc/httpd/conf.d/nss.conf
設定檔,在 <VirtualHost>
的設定中加入:
ProxyPass /static/ ! ProxyPassReverse /static/ ! ProxyPass / ajp://localhost:8009/ ProxyPassReverse / ajp://localhost:8009/
這裡的 ajp://localhost:8009/
是 Tomcat 內部用的位址,這個設定可讓 Apache 透過 AJP 協定將來自外部的連線導向至 Tomcat 伺服器。
設定檔修改之後,重新啟動 Apache 伺服器,讓新設定生效:
systemctl restart httpd.service
接下來開啟一般的 HTTPS 加密網頁,就會直接顯示 Tomcat 伺服器的內容,而如果是在 /static/
路徑下的網頁則會由 Apache 處理,像是 PHP 或靜態的 HTML、CSS 與 JavaScript 等檔案就可以放在這裡。
參考資料:antoine hordez、DigitalOcean、HostPresto