今天要來講一個新的東西:virtual host。
他的概念是在一個apache server上同時架很多台的主機,可以用IP、port、網址等等來讓apache導向不同網頁,而且瀏覽網頁的人看不出來,而我們示範會用不同的port來讓瀏覽者看到不同網頁。
因為它可以放很多的虛擬主機,所以我們先來看看單一個的結構:
<VirtualHost *:443>
ServerAdmin admin@example.com
DocumentRoot "/usr/local/www/apache24/data"
ServerName test.cnmc.tw
ServerAlias www.test.cnmc.tw
ErrorLog "/var/log/test.log"
CustomLog "/var/log.test.log" commom
</VirtualHost>
應該有看到很多是之前講過的吧,所以我們就略過囉。
要注意的是如果啟用httpd-vhosts.conf
,要換網頁路徑就要到這裡而不是httpd.conf
喔。
那我們來講一下之前沒說過的:ServerAlias [www.example.com]
:
他是可以讓其他網址也連到這個網站用的,當然你DNS要先設好,而且因為我們不提到網址的virtual host,所以他就會被略過。
CustomLog
:
這個有點可怕,他可以用apache官網說的那一堆格式化的參數來調整你的log,他是調整內容,而ErrorLog
是調位置。
然後他httpd.conf其實也有只是我從來沒注意到(摀臉,然後我也看不太懂他到底在寫甚麼,看到字串格式化我就怕。
總之剛剛有翻文看了一下,跟自己喜歡的整理一下,就寫在這吧:%a
Client IP address of the request
來訪的IP
%s
Status. For requests that have been internally redirected, this is the status of the original request. Use %>s for the final status.
他會給一些狀態的資料,像是用get還是post、http狀態碼之類的。
用的ErrorLog大概會出現像這樣的東西:"GET / HTTP/1.1" 304 -
%t
Time the request was received, in the format [18/Sep/2011:19:18:28 -0400]. The last number indicates the timezone offset from GMT
連線請求的時間,他說最後一個數字是跟格林威治時間的時差,像我們就會是+0800
。
好那我們快速地講過一些參數之後就可以開始架虛擬主機了!
我們會用到很多個上面那種結構,舉列來說:
<VirtualHost *:443>
ServerAdmin admin@example.com
DocumentRoot "/usr/local/www/apache24/data"
ErrorLog "/var/log/test.log"
CustomLog "/var/log.test.log" commom
</VirtualHost>
<VirtualHost *:80>
ServerAdmin admin@example.com
DocumentRoot "/usr/local/www/apache24/data/test80"
ErrorLog "/var/log/test.log"
CustomLog "/var/log.test.log" commom
</VirtualHost>
其實大概只要打成這個樣子就可以了,443 port會連到/usr/local/www/apache24/data
;而80 port會連到/usr/local/www/apache24/data/test80
。
但是這樣還不會生效,我們要回到httpd.conf囉!
先找到大概在509行的#Include etc/apache24/extra/httpd-vhosts.conf
,把它取消註解,然後就去service apache24 restart
,然後去看看你的網頁:
OAO他死掉了,這是因為你的SSL沒有弄的緣故,還記得昨天的httpd-ssl.conf
裡面也有VirtualHost
吧,因為現在用了httpd-vhosts.conf
,所以跟改網站檔案的路徑一樣,要在這裡改。
所以在兩個<VirtualHost>
裡面都加上:
SSLEngine On
SSLCertificateFile "/usr/local/etc/letsencrypt/live/test.cnmc.tw/fullchain.pem"
SSLCertificateKeyFile "/usr/local/etc/letsencrypt/live/test.cnmc.tw/privkey.pem"
就是跟昨天在httpd-ssl.conf那邊打一樣的東西,只是昨天他已經幫你寫好第一行了。這時候又建議開一下screen,比較好做事。
今天架了一下虛擬主機,但是其實以port來做實用性不高,畢竟不會有人知道你到底用了個port,所以通常是機密性或是私人性的比較容易用到。
而開的port也要注意一下,有時候就是開不起來(可能被占用之類的),然後你就會很問號。基本上80、443、8080等都是可以開的。
但是為了方便起見,我之後都會把virtual hosts關掉,不然容易出現奇妙的事情,畢竟我也說了,用port來弄其實一般人不會知道你到底開了什麼port,所以就是測試而已。
話說今天考完段考了欸,所以今天我文章沒有時間壓力XD
最近好好休息一下好了,段考+鐵人賽真的不是鬧著玩的...
噢而且我物理及格了,開心開心。