配置httpd虚拟主机
輕松配置httpd的虛擬主機(jī)
httpd使用VirtualHost指令進(jìn)行虛擬主機(jī)的定義。支持三種虛擬主機(jī):基于ip,基于端口和基于名稱。其中基于端口的虛擬主機(jī)在httpd的術(shù)語上(例如官方手冊)也屬于基于IP的。
當(dāng)一個請求到達(dá)時,將首先匹配虛擬主機(jī)。匹配虛擬主機(jī)的規(guī)則為最佳匹配法。所謂最佳,是指通配的越少,匹配的優(yōu)先級越高。例如"192.168.100.14:80"的優(yōu)先級高于"*:80"。如果基于名稱的虛擬主機(jī)無法匹配上,則采用虛擬主機(jī)列表中的第一個虛擬主機(jī)作為響應(yīng)主機(jī)。如果所有虛擬主機(jī)都無法匹配上,則采用從主配置段落中的主機(jī),如果主配置段落中注釋了DocumentRoot,則返回對應(yīng)的錯誤。
主配置段落的指令基本上都能使用在虛擬主機(jī)容器中。至于虛擬主機(jī)中必須配有什么指令,這沒有規(guī)定,因?yàn)樘摂M主機(jī)只是封裝一組指令而已,即使其中沒有任何指令,它也會從主配置段落中繼承。但是,既然要使用且已經(jīng)使用了虛擬主機(jī),按照常理來說,至少得提供不同的ServerName,DocumentRoot等指令以讓它們各自獨(dú)立。
最后需要說明的是,httpd的"-S"選項(xiàng)在調(diào)試虛擬主機(jī)配置選項(xiàng)時非常有用。
1 基于IP的虛擬主機(jī)
基于IP的虛擬主機(jī)是在不同的IP+PORT上提供不同的站點(diǎn)服務(wù),最常見的是在不同端口上提供不同站點(diǎn)。
如果僅基于IP,即使用不同IP地址,那么要求操作系統(tǒng)上有兩個或更多IP地址,可以提供多個網(wǎng)卡,或者通過網(wǎng)卡別名來實(shí)現(xiàn)。
如果基于端口,即使用不同端口,則使用相同IP或不同IP均可,但在httpd術(shù)語中,基于單個IP但不同端口的虛擬主機(jī),也是基于IP的虛擬主機(jī)。
假設(shè)本機(jī)為192.168.100.14。
# 首先設(shè)置個虛擬網(wǎng)卡。
shell> ip a add 192.168.100.144 dev eth0 label eth0:0# 添加基于IP地址的虛擬主機(jī),DocumentRoot使用的相對路徑,基于ServerRoot
shell> vim /etc/apache/extra/vhosts.conf <VirtualHost 192.168.100.14:80> ServerName www.a.com DocumentRoot htdocs/a.com </VirtaulHost><VirtualHost 192.168.100.144:80> ServerName www.b.com DocumentRoot htdocs/b.com </VirtaulHost>?
在主配置文件中,將該虛擬主機(jī)配置文件vhosts.conf包含進(jìn)去。
include /etc/apache/extra/vhosts.conf再提供DocumentRoot和各自的index.html。
mkdir /usr/local/apache/htdocs/{a.com,b.com} echo '<h1>a.com<h1>' >/usr/local/apache/htdocs/a.com/index.html echo '<h1>b.com<h1>' >/usr/local/apache/htdocs/b.com/index.html使用httpd -S查看配置文件加載過程。
[root@xuexi httpd-2.4.27]# httpd -S -f /etc/apache/httpd.conf VirtualHost configuration: 192.168.100.14:80 www.a.com (/etc/apache/extra/vhosts.conf:23) 192.168.100.144:80 www.b.com (/etc/apache/extra/vhosts.conf:28) ServerRoot: "/usr/local/apache" Main DocumentRoot: "/usr/local/apache/htdocs" Main ErrorLog: "/usr/local/apache/logs/error_log" Mutex proxy: using_defaults Mutex default: dir="/usr/local/apache/logs/" mechanism=default PidFile: "/usr/local/apache/logs/httpd.pid" Define: DUMP_VHOSTS Define: DUMP_RUN_CFG User: name="daemon" id=2 Group: name="daemon" id=2重啟httpd。
service httpd restart測試。
2 基于端口的虛擬主機(jī)
基于端口的虛擬主機(jī)需要監(jiān)聽兩個套接字。
首先在配置文件中使用Listen指令修改監(jiān)聽套接字,這里假設(shè)只基于端口,所以只需修改端口號即可。
listen 80 listen 8080修改虛擬主機(jī)配置文件vhosts.conf文件如下:
shell> vim /etc/apache/extra/vhosts.conf<VirtualHost 192.168.100.14:80> ServerName www.a.com DocumentRoot htdocs/a.com </VirtaulHost><VirtualHost 192.168.100.14:8080> ServerName www.b.com DocumentRoot htdocs/b.com </VirtaulHost>重啟httpd。測試www.a.com和www.b.com能否顯示。
3 基于名稱的虛擬主機(jī)
請求報文中獲取資源時包含了兩部分資源定位的格式:TCP/IP協(xié)議和HTTP協(xié)議,雖然TCP/IP部分相同,但是HTTP協(xié)議的請求報文中指定了HOST,這就是基于域名的虛擬主機(jī)能實(shí)現(xiàn)的原因。也因此,基于名稱的虛擬主機(jī)必須指定ServerName指令,否則它將會繼承操作系統(tǒng)的FQDN。
注意,對于基于名稱的虛擬主機(jī),當(dāng)使用IP地址請求(例如瀏覽器中輸入的是IP地址),或者無法匹配到任何虛擬主機(jī)時,將采用第一個虛擬主機(jī)作為默認(rèn)虛擬主機(jī)。
例如,當(dāng)某個hosts文件中添加了"192.168.100.14 www.c.com"時,即使在配置文件中并沒有配置www.c.com的虛擬主機(jī),但訪問時仍然會訪問虛擬主機(jī)列表的第一個。
?
轉(zhuǎn)載自駿馬金龍:http://www.cnblogs.com/f-ck-need-u/p/7632878.html
轉(zhuǎn)載于:https://www.cnblogs.com/Template/p/9110353.html
總結(jié)
以上是生活随笔為你收集整理的配置httpd虚拟主机的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Sass函数-数字函数-floor()函
- 下一篇: 用中文传话游戏理解 RNN