如何在流行而強大的 Apache Web 服務(wù)器上托管兩個或多個站點。
在我的上一篇文章中,我解釋了如何為單個站點配置 Apache Web 服務(wù)器,事實證明這很容易。在這篇文章中,我將向你展示如何使用單個 Apache 實例來服務(wù)多個站點。
注意:我寫這篇文章的環(huán)境是 Fedora 27 虛擬機,配置了 Apache 2.4.29。如果你用另一個發(fā)行版或不同的 Fedora 版本,那么你使用的命令以及配置文件的位置和內(nèi)容可能會有所不同。
正如我之前的文章中提到的,Apache 的所有配置文件都位于 /etc/httpd/conf 和 /etc/httpd/conf.d 。默認情況下,站點的數(shù)據(jù)位于 /var/www 中。對于多個站點,你需要提供多個位置,每個位置對應(yīng)托管的站點。
基于名稱的虛擬主機
使用基于名稱的虛擬主機,你可以為多個站點使用一個 IP 地址?,F(xiàn)代 Web 服務(wù)器,包括 Apache,使用指定 URL 的 hostname 部分來確定哪個虛擬 Web 主機響應(yīng)頁面請求。這僅僅需要比一個站點更多的配置。
即使你只從單個站點開始,我也建議你將其設(shè)置為虛擬主機,這樣可以在以后更輕松地添加更多站點。在本文中,我將從上一篇文章中我們停止的地方開始,因此你需要設(shè)置原來的站點,即基于名稱的虛擬站點。
準(zhǔn)備原來的站點
在設(shè)置第二個站點之前,你需要為現(xiàn)有網(wǎng)站提供基于名稱的虛擬主機。如果你現(xiàn)在沒有站點,請返回并立即創(chuàng)建一個。
一旦你有了站點,將以下內(nèi)容添加到 /etc/httpd/conf/httpd.conf
配置文件的底部(添加此內(nèi)容是你需要對 httpd.conf 文件進行的唯一更改):
<VirtualHost 127.0.0.1:80>
DocumentRoot /var/www/html
ServerName www.site1.org
</VirtualHost>
這將是第一個虛擬主機配置節(jié),它應(yīng)該保持為第一個,以使其成為默認定義。這意味著通過 IP 地址或解析為此 IP 地址但沒有特定命名主機配置節(jié)的其它名稱對服務(wù)器的 HTTP 訪問將定向到此虛擬主機。所有其它虛擬主機配置節(jié)都應(yīng)跟在此節(jié)之后。
你還需要使用 /etc/hosts 中的條目設(shè)置你的網(wǎng)站以提供名稱解析。上次,我們只使用了 localhost 的 IP 地址。通常,這可以使用你使用的任何名稱服務(wù)來完成,例如 Google 或 Godaddy。對于你的測試網(wǎng)站,通過在 /etc/hosts 中的 localhost 行添加一個新名稱來完成此操作。添加兩個網(wǎng)站的條目,方便你以后不需再次編輯此文件。結(jié)果如下:
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 www.site1.org www.site2.org
讓我們將 /var/www/html/index.html 文件改變得更加明顯一點。它應(yīng)該看起來像這樣(帶有一些額外的文本來識別這是站點 1):
<h1>Hello World</h1>
Web site 1.
重新啟動 HTTPD 服務(wù)器,已啟用對 httpd 配置的更改。然后,你可以從命令行使用 Lynx 文本模式查看網(wǎng)站。
[root@testvm1 ~]# systemctl restart httpd
[root@testvm1 ~]# lynx www.site1.org
Hello World
Web site 1.
<snip>
Commands: Use arrow keys to move, '?' for help, 'q' to quit, '<-' to go back.
Arrow keys: Up and Down to move. Right to follow a link; Left to go back.
H)elp O)ptions P)rint G)o M)ain screen Q)uit /=search [delete]=history list
你可以看到原始網(wǎng)站的修改內(nèi)容,沒有明顯的錯誤,先按下 Q 鍵,然后按 Y 退出 Lynx Web 瀏覽器。
配置第二個站點
現(xiàn)在你已經(jīng)準(zhǔn)備好建立第二個網(wǎng)站。使用以下命令創(chuàng)建新的網(wǎng)站目錄結(jié)構(gòu):
[root@testvm1 html]# mkdir -p /var/www/html2
注意,第二個站點只是第二個 html 目錄,與第一個站點位于同一 /var/www 目錄下。
現(xiàn)在創(chuàng)建一個新的索引文件 /var/www/html2/index.html
,其中包含以下內(nèi)容(此索引文件稍有不同,以區(qū)別于原來的網(wǎng)站):
<h1>Hello World -- Again</h1>
Web site 2.
在 httpd.conf 中為第二個站點創(chuàng)建一個新的配置節(jié),并將其放在上一個虛擬主機配置節(jié)下面(這兩個應(yīng)該看起來非常相似)。此節(jié)告訴 Web 服務(wù)器在哪里可以找到第二個站點的 HTML 文件。
<VirtualHost 127.0.0.1:80>
DocumentRoot /var/www/html2
ServerName www.site2.org
</VirtualHost>
重啟 HTTPD,并使用 Lynx 來查看結(jié)果。
[root@testvm1 httpd]# systemctl restart httpd
[root@testvm1 httpd]# lynx www.site2.org
Hello World -- Again
Web site 2.
<snip>
Commands: Use arrow keys to move, '?' for help, 'q' to quit, '<-' to go back.
Arrow keys: Up and Down to move. Right to follow a link; Left to go back.
H)elp O)ptions P)rint G)o M)ain screen Q)uit /=search [delete]=history list
在這里,我壓縮了輸出結(jié)果以適應(yīng)這個空間。頁面的差異表明這是第二個站點。要同時顯示兩個站點,請打開另一個終端會話并使用 Lynx Web 瀏覽器查看另一個站點。
其他考慮
這個簡單的例子展示了如何使用 Apache HTTPD 服務(wù)器的單個實例來服務(wù)于兩個站點。當(dāng)考慮其他因素時,配置虛擬主機會變得有點復(fù)雜。
例如,你可能希望為這些網(wǎng)站中的一個或全部使用一些 CGI 腳本。為此,你可能為 CGI 程序在 /var/www 目錄下創(chuàng)建一些目錄: /var/www/cgi-bin 和 /var/www/cgi-bin2
,以與 HTML 目錄命名一致。然后,你需要將配置指令添加到虛擬主機節(jié),以指定 CGI 腳本的目錄位置。每個站點可以有下載文件的目錄。這還需要相應(yīng)虛擬主機節(jié)中的條目。
Apache 網(wǎng)站 描述了管理多個站點的其他方法,以及從性能調(diào)優(yōu)到安全性的配置選項。
Apache 是一個強大的 Web 服務(wù)器,可以用來管理從簡單到高度復(fù)雜的網(wǎng)站。盡管其總體市場份額在縮小,但它仍然是互聯(lián)網(wǎng)上最常用的 HTTPD 服務(wù)器。