導(dǎo)語
Apache web 服務(wù)器運行著互聯(lián)網(wǎng)上超過半數(shù)的活躍的 web 站點酣胀,它憑借著靈活且強(qiáng)勁的功能而廣受歡迎。
Apache 將其功能和組件分解成能夠被獨立定制和配置的單元全度。我們稱代表著單個 web 站點的基礎(chǔ)單元為虛擬主機(jī)煮剧。借助匹配系統(tǒng),虛擬主機(jī)為服務(wù)器提供了同時運行多個 web 站點的可能。這與任何一個試圖在同一臺服務(wù)器上運行多個 web 站點的人都息息相關(guān)勉盅。
無須關(guān)心同一臺服務(wù)器上可能運行的其他 web 站點佑颇,任何一個經(jīng)過配置的 web 站點地址都會將訪問者帶領(lǐng)到存放著特定內(nèi)容的目錄。只要你的服務(wù)器能夠處理 web 站點帶來的訪客流草娜,這個方案可以不受軟件的約束而不斷擴(kuò)展漩符。
在這篇指南中,我們將示范如何在 CentOS 7 服務(wù)器上部署多個 Apache 虛擬主機(jī)驱还。在這一過程中嗜暴,你將學(xué)到如何為不同 web 站點的訪問者提供各自請求的內(nèi)容。
預(yù)備條件
在繼續(xù)閱讀這篇指南之前议蟆,請確認(rèn)你已經(jīng)完成了『CentOS 7 安裝 Apache, MySQL, PHP 指南』中的第一步 —— 安裝 Apache闷沥。
注:這篇指南將 8.8.8.8 作為示例服務(wù)器地址,我們將在地址 8.8.8.8:8080 和 8.8.8.8:8086 分別部署一個 web 站點咐容。實際操作過程中舆逃,請將 8.8.8.8 替換成你的服務(wù)器的 IP 地址,8080 和 8086 替換成你實際部署 web 站點時使用的端口號戳粒。
第一步 —— 創(chuàng)建目錄結(jié)構(gòu)
首先路狮,我們需要創(chuàng)建一個目錄結(jié)構(gòu)以支撐 web 站點提供數(shù)據(jù)服務(wù)。
我們即將部署的虛擬主機(jī)的 document root(Apache 憑借這個最高層目錄查閱并找出用以提供服務(wù)的內(nèi)容)將會被設(shè)為 /var/www 目錄下各個 web 站點自身所在的目錄蔚约。因此奄妨,我們將在 /var/www 目錄下為每個虛擬主機(jī)創(chuàng)建一個目錄。
在每個虛擬主機(jī)目錄里苹祟,我們將創(chuàng)建一個 html 目錄來存放 web 站點的實際內(nèi)容砸抛。這為我們的服務(wù)器提供了額外的一些靈活性。
假設(shè)現(xiàn)在我們有兩個 web 站點需要對外提供服務(wù)树枫,分別為 webapp1 和 webapp2直焙。我們可以使用 mkdir 命令(帶上一個 -p 標(biāo)記使我們能夠嵌套創(chuàng)建新目錄內(nèi)的新目錄)創(chuàng)建這些目錄:
$ sudo mkdir –p /var/www/webapp1/html
$ sudo mkdir –p /var/www/webapp2/html
注:你需要將上面路徑中的 webapp1 和 webapp2 替換成實際需要部署的 web app 的名稱。
第二步 —— 授予權(quán)限
現(xiàn)在我們已經(jīng)為文件創(chuàng)建了目錄結(jié)構(gòu)砂轻,但這些目錄結(jié)構(gòu)都為 root 用戶所有奔誓。如果希望服務(wù)器上的普通用戶也能夠修改 web 目錄下的文件,我們可以使用 chown 命令轉(zhuǎn)移目錄的所有者:
$ sudo chown –R $USER:$USER /var/www/webapp1/html
$ sudo chown –R $USER:$USER /var/www/webapp2/html
當(dāng)你提交上述 chown 命令時搔涝,$USER 變量將會取值為當(dāng)前登錄服務(wù)器的用戶厨喂。這樣,我們的普通用戶就取得了 html 子目錄的所有權(quán)体谒。
此外杯聚,我們還需要對這里的目錄權(quán)限做一點修改,確保對一般的 web 目錄及其內(nèi)部的子目錄和文件的讀取都是被允許的抒痒,這樣幌绍,網(wǎng)頁才能正常地為訪問者提供服務(wù):
$ sudo chmod –R 755 /var/www
現(xiàn)在你的服務(wù)器應(yīng)該已經(jīng)取得了為向 web 站點訪問者提供內(nèi)容所需的權(quán)限,并且服務(wù)器上的用戶現(xiàn)在應(yīng)該能夠在恰當(dāng)?shù)奈募A下創(chuàng)建內(nèi)容。
第三步 —— 為每一個虛擬主機(jī)創(chuàng)建示例頁面
現(xiàn)在目錄結(jié)構(gòu)已經(jīng)準(zhǔn)備就緒了傀广,我們可以著手創(chuàng)造一些內(nèi)容對外提供服務(wù)颁独。
出于演示的目的,我們的頁面將會非常的簡單伪冰。我們僅僅打算為每個站點創(chuàng)建一個 index.html 頁面誓酒。
我們就從 webapp1 開始。通過下面這條命令贮聂,我們可以創(chuàng)建一個 index.html 文件:
$ sudo vi /var/www/webapp1/html/index.html
這將會打開一個空白的文件靠柑,敲擊小寫字母 I 即可進(jìn)行編輯。我們可以在文件中鍵入HTML代碼來表明這個頁面所連接的 web 站點吓懈。在這份指南中歼冰,我們的這個站點文件是這樣子的:
然后,敲擊 ESC 并鍵入 :wq! 即可保存并關(guān)閉這個文件耻警。
利用下面這條命令隔嫡,我們可以將上面創(chuàng)建的模板文件復(fù)制為第二個站點的 index.html 文件:
$ sudo cp /var/www/webapp1/html/index.html /var/www/webapp2/html/index.html
現(xiàn)在我們打開文件并修改與站點相關(guān)的信息:
$ sudo vi /var/www/webapp2/html/index.html
保存并退出這個文件。現(xiàn)在你已經(jīng)將測試虛擬主機(jī)配置需要用到的頁面準(zhǔn)備妥當(dāng)了甘穿。
第四步 —— 創(chuàng)建新的虛擬主機(jī)文件
虛擬主機(jī)文件是一類指定各個 web 站點配置和決定 Apache web 服務(wù)器如何響應(yīng)訪問者對不同站點的請求的文件腮恩。
首先,我們需要創(chuàng)建用以存放虛擬主機(jī)的目錄温兼,以及用以向 Apache 表明一臺虛擬主機(jī)已經(jīng)做好準(zhǔn)備向訪問者提供服務(wù)的目錄秸滴。 sites-available 目錄將會存放所有的虛擬主機(jī)文件,而 sites-enabled 目錄將會存放我們想對外提供服務(wù)的主機(jī)的符號鏈接妨托。我們可以借助下列命令來創(chuàng)建這兩個目錄:
$ sudo mkdir /etc/httpd/sites-available
$ sudo mkdir /etc/httpd/sites-enabled
注:這里的目錄布局是由 Debian 社區(qū)的貢獻(xiàn)者引入的缸榛,出于為虛擬主機(jī)添加靈活性的原因吝羞,我們在此采用這種方案(這種方式更容易臨時啟用和禁用虛擬主機(jī))兰伤。
接下來,我們需要告知 Apache 到 sites-enabled 目錄里尋找虛擬主機(jī)钧排。為了達(dá)到這個目的敦腔,我們將編輯 Apache 的主配置文件,添加一行用以聲明額外配置文件所在的可選目錄:
$ sudo vi /etc/httpd/conf/httpd.conf
將下面這一行添加到文件的末尾:
IncludeOptional sites-enabled/*.conf
在添加完上面這一行后恨溜,保存并關(guān)閉文件》危現(xiàn)在我們已經(jīng)準(zhǔn)備好創(chuàng)建第一個虛擬主機(jī)文件了。
創(chuàng)建第一個虛擬主機(jī)文件
我們從使用 root 權(quán)限創(chuàng)建 webapp1 虛擬主機(jī)文件開始:
$ sudo vi /etc/httpd/sites-available/webapp1.conf
注:依據(jù)我們上面配置文件中的概述糟袁,所有的主機(jī)文件名必須以 .conf結(jié)尾判族。
在文件 webapp1.conf 里,我們首先指定虛擬主機(jī) webapp1 監(jiān)聽的端口號是 8080项戴,以及一個表明文件中內(nèi)容是虛擬主機(jī)配置的序?qū)Γ?/p>
接著形帮,為了方便未來使用域名訪問虛擬主機(jī),我們將聲明服務(wù)器的名稱為 www.webapp1.com。同時辩撑,我們也為服務(wù)器指定了一個別名webapp1.com界斜,以便向 www.webapp1.com 和 webapp1.com 發(fā)送的請求得到的內(nèi)容是相同的。
最后合冀,我們以指定存放外界能夠接觸到的 web 文件所在的根目錄來結(jié)束創(chuàng)建第一個主機(jī)文件各薇。我們也將告知 Apache 將這個 web 站點上的錯誤信息和請求紀(jì)錄存放在何處:
在寫下這些條目后,你就可以保存并關(guān)閉這個文件了君躺。
復(fù)制并定制其余虛擬主機(jī)文件
現(xiàn)在我們已經(jīng)創(chuàng)建好了第一個虛擬主機(jī)文件峭判,我們可以復(fù)制那個文件以創(chuàng)建并按需修改從而得到第二個虛擬主機(jī)文件。
我們從使用 cp 命令復(fù)制文件開始:
$ sudo cp /etc/httpd/sites-available/webapp1.conf /etc/httpd/sites-available/webapp2.conf
接著以 root 權(quán)限打開并編輯這個新文件:
$ sudo vi /etc/httpd/sites-available/webapp2.conf
現(xiàn)在我們需要修改新文件中的所有配置信息指向第二個 web 站點棕叫。當(dāng)你編輯完成時朝抖,你的第二個虛擬主機(jī)文件可能像下面這樣子:
在完成這些變更后,你就可保存并退出這個文件谍珊。
第五步 —— 啟用新的虛擬主機(jī)文件
現(xiàn)在我們已經(jīng)創(chuàng)建好了虛擬主機(jī)文件治宣,我們需要啟用它們以便 Apache 知道使用它們向訪問者提供服務(wù)。為此砌滞,我們可以在 sites-enabled 目錄下為每個虛擬主機(jī)創(chuàng)建符號鏈接:
$ sudo ln -s /etc/httpd/sites-available/webapp1.conf /etc/httpd/sites-enabled/webapp1.conf
$ sudo ln -s /etc/httpd/sites-available/webapp2.conf /etc/httpd/sites-enabled/webapp2.conf
當(dāng)你完成這些步驟后侮邀,重啟 Apache 使得這些變更生效。
第六步 —— 允許 Apache 穿越防火墻
現(xiàn)在我們需要使用 FirewallD 允許 Apache 在 8080 和 8086 端口上穿過網(wǎng)絡(luò)防火墻:
$ sudo firewall-cmd --permanent --add-port=8080/tcp
$ sudo firewall-cmd --permanent --add-port=8086/tcp
重啟網(wǎng)絡(luò)防火墻服務(wù)使變更生效:
$ sudo firewall-cmd --reload
第七步 —— 測試你的結(jié)果
現(xiàn)在你已經(jīng)設(shè)置好了虛擬主機(jī)贝润,你可以在瀏覽器里輸入下列地址來測試你的結(jié)果:
http://8.8.8.8:8080
你應(yīng)該看到一個像下面這樣子的頁面:
同樣的绊茧,如果你訪問另一個虛擬主機(jī)地址(http://8.8.8.8:8086),你應(yīng)該看到之前為之創(chuàng)建的內(nèi)容打掘。
如果你能夠正常訪問我們上面配置的這些站點华畏,那么你已經(jīng)成功地為 CentOS 7 服務(wù)器配置了新的 Apache 虛擬主機(jī)。
結(jié)論
現(xiàn)在尊蚁,通過不同的端口號亡笑,你可以使用一臺 CentOS 7 服務(wù)器運行多個 web 站點。遵循上述步驟横朋,在服務(wù)器的負(fù)載范圍內(nèi)仑乌,你可以不受軟件約束,擴(kuò)展任意多臺的虛擬主機(jī)琴锭。
參考鏈接:
https://www.digitalocean.com/community/tutorials/how-to-set-up-apache-virtual-hosts-on-centos-7
https://devops.profitbricks.com/tutorials/how-to-set-up-ip-and-port-based-virtual-hosting-vhosts-with-apache-web-server-on-centos-7/
https://httpd.apache.org/docs/2.4/vhosts/examples.html#port