http://zhang789.blog.51cto.com/11045979/1859026
詳解CentOS配置和管理web服務-Apache
目錄
1、web介紹
2、web歷史和工作原理
3、http請求流程
4、關於Apache
5、Apache服務器軟件安裝使用
6、符號鏈接和虛擬目錄
7、頁面重定向
8、Apache日誌文件
9、Apache安全配置
10、虛擬主機
10.1、基於IP
10.2、基於域名
10.3、基於端口
web服務器配置和管理
http協議簡介
http協議,全稱HyperText Transfer Protocol,中文名稱超文本傳輸協議,是互聯網應用最爲廣泛的一種網絡協議,所有的www都必須遵守這個標準,設計http最初的目的爲了提供一種發佈和接收HTML(一種頁面標記語言)
web服務器介紹
萬維網又稱web(world wide web,www),是在internet上以超文本爲基礎形成的信息網,用戶可以通過瀏覽器可以訪問web服務器上面的信息資源
web服務的歷史和工作原理
web服務的歷史
Internet上最熱門的服務之一就是萬維網,它是因特網上以超文本爲基礎形成的信息網,用戶可以通過查閱Internet上的信息資源,例如:平時上網使用瀏覽器訪問網站信息的最常見應用。
web在1989年起源於歐洲的一個國家核能源研究院中,由於隨着研究的深入和發展,研究院的文件越來越多,而且人員流動非常大,要找到相關的資料是非常困難的,於是一個科學家就提出這樣的一個建議,咋服務器上維護一個目錄,目錄的鏈接指向每個人的文件,每個人維護自己的文件,保證別人訪問的時候總是最新的文檔,這個建議得到了採納並不斷的完善後,最終形成如今Internet上最常見的www服務
web的工作原理
web系統是客戶端/服務端的C/S架構,所以有服務器端端和客戶端程序兩個部分,常用的服務器端軟件有Apache,IIS,nginx等,常見的客戶端瀏覽器有IE,Mozilla等,用戶在瀏覽器地址欄中輸入資源定位地址(URL)來訪問web頁面
web頁面是以超文本標記語言(HTML)進行編寫,它是文本不在是傳統的書頁方式文本,而是可以在瀏覽器上面從一個頁面跳轉到另一個頁面,使用HTML語言編制的web除了文本意外還可以嵌入視頻,音樂,圖象等
瀏覽一個頁面時,(比如http://www.baidu.com/index.html)瀏覽器會向服務器www.baidu.com發送一條HTTP請求,服務器會去尋找所期望的對象(在這個例子就是/index.html),如果發送成功,就將對象,對象類型,對象長度以及其他一些信息放在http響應中發給客戶端
[root@localhost ~]# curl -I www.baidu.com
HTTP/1.1 200 OK
Server: bfe/1.0.8.18
Date: Thu, 06 Oct 2016 07:23:46 GMT
Content-Type: text/html
Content-Length: 277
Last-Modified: Mon, 13 Jun 2016 02:50:09 GMT
Connection: Keep-Alive
ETag: "575e1f61-115"
Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
Pragma: no-cache
Accept-Ranges: bytes
http協議請求原理過程圖
一次完整的Http請求處理過程:
(1) 建立或處理連接請求;
(2) 接收請求;
(3) 解析請求,處理請求;
(4) 加載用戶請求的資源;
(5) 構建響應報文;
(6) 發送響應報文;
(7) 記錄訪問於日誌中;
訪問錯誤響應碼
1xx:
2xx: 成功響應
3xx: 重定向響應
4xx: 客戶端錯誤
5xx: 服務端錯誤
知名Web服務
某個網站統計的web軟件排名
Windows系統中默認Web服務程序是IIS(Internet Information Services),這是一款圖形化的網站管理工具,IIS程序不光能提供Web網站服務,還能夠提供FTP、NMTP、SMTP等服務功能,但只能在Windows系統中使用。
nginx——最初於2004年10月4日爲俄羅斯知名門戶站點而開發的,作爲一款輕量級的網站服務軟件,因其穩定性和豐富的功能而深受信賴,但最最最被認可的是低系統資源、佔用內存少且併發能力強,目前國內如新浪、網易、騰訊等門戶站均使用。
Apache——取自美國印第安人土著語Apache,寓意着擁有高超的作戰策略和無窮的耐性,由於其跨平臺和安全性廣泛被認可且擁有快速、可靠、簡單的API擴展。目前擁有很高的Web服務軟件市場佔用率,全球使用最多的Web服務軟件,開源、跨平臺(可運行於Unix,linux,windows中)。
Tomcat——屬於輕量級的Web服務軟件,一般用於開發和調試JSP代碼,通常認爲Tomcat是Apache的擴展程序。
關於Apache服務
Nginx程序作爲Web服務軟件屆的後起之秀已經通過自身的努力與優勢贏得了大批站長的信賴,不得不說真的很棒!但是Apache程序作爲老牌的Web服務軟件因其卓越的穩定性與安全性成爲了紅帽RHEL7系統中默認的網站服務軟件,同樣也是紅帽RHCSA與RHCE考試認證中避不開的考題。
Apache簡介
Apache是一種開源的httpd服務器軟件,可以在UNIX、Linux以及Windows在內的大多數主流計算機操作系統系統上面運行,Apache是由Illinois大學Urbana-Champaign的國家高級計算機程序中心開發,它的名字取自apatchy server 的讀音,即充滿補丁的服務器,可見在最初的時候該程序並不是非常完善
Apache優點
但由於Apache是開源軟件,所以得到開源社區的支持,不斷開發出新的功能特性,並修補了原來的缺陷,經過多年不斷的完善,如今的Apache已經是最流行的web服務端軟件之一Apache擁有以下衆多的特性,保證了它可以高速穩定的運行
支持所有的計算機平臺
簡單有效的配置文件
支持虛擬主機
支持多種方式的http認證
集成Perl腳本語言
集成代理服務器模塊
支持實時監視服務器狀態和定製服務器日誌
支持服務器端包含指令
支持Php
支持第三方軟件開發商提供的軟件
Apache模塊化
Apache服務器的安裝使用
httpd相關軟件及安裝
httpd-2.2.15-29.el6_4.x86_64.rpm //服務端主程序包,服務器運行核心軟件包
httpd-devel-2.2.15-29.el6_4.x86_64.rpm //apache開發程序包,如開發附加模塊的時候需要此軟件
httpd-manual-2.2.15-29.el6_4.noarch.rpm //Apache手冊文檔
httpd-tools-2.2.15-29.el6_4.x86_64.rpm //一起apache的工具,如htpasswd
apr-devel-1.3.9-5.el6_2.x86_64.rpm //安裝httpd-devel的時候的依賴包
apr-util-devel-1.3.9-3.el6_0.1.x86_64.rpm //安裝httpd-devel的時候的依賴包
expat-devel-2.0.1-11.el6_2.x86_64.rpm //安裝httpd-devel的時候的依賴包
安裝Apache
Linux基本都自帶Apache軟件
[root@localhost ~]# ls /mnt/Packages/ | grep "httpd"
httpd-2.2.15-53.el6.centos.x86_64.rpm
[root@localhost ~]# yum install -y httpd httpd-manual
[root@localhost ~]# yum install -y elinks //這是一個字符界面瀏覽器 使用方式 “elinks 域名”
[root@localhost ~]# service httpd restart //服務啓動
[root@localhost ~]# chkconfig httpd on //服務開機啓動
[root@localhost ~]# netstat -antup | grep 80 //啓動是否成功,查看端口是否開放
相關文件
[root@localhost ~]# ls /etc/httpd/ //apache工作目錄,配置文件目錄
[root@localhost ~]# ls /etc/httpd/conf/httpd.conf //yum或rpm方式安裝的配置文件位置
[root@localhost ~]# ls /etc/httpd/conf.d/ //這個是默認httpd.conf裏面include位置
[root@localhost ~]# ls /var/log/httpd/ //默認日誌目錄
[root@localhost ~]# ls /var/log/httpd/access_log //默認訪問日誌
[root@localhost ~]# ls /var/log/httpd/error_log //默認錯誤日誌
[root@localhost ~]# ls /var/www/html/ //默認網站根目錄
[root@localhost ~]# ls /etc/httpd/modules/ //apache庫文件,模塊文件目錄
[root@localhost ~]# ls /etc/httpd/run/httpd.pid //apache運行的進程pid
[root@localhost ~]# ls /var/www/manual/ //apache手冊也,需要安裝httpd-manual
查看Apache的相關信息
查看Apache軟件版本信息
[root@localhost ~]# httpd -V
Server version: Apache/2.2.15 (Unix)
Server built: May 11 2016 19:28:33
Server's Module Magic Number: 20051115:25
Server loaded: APR 1.3.9, APR-Util 1.3.9
Compiled using: APR 1.3.9, APR-Util 1.3.9
Architecture: 64-bit
Server MPM: Prefork
threaded: no
forked: yes (variable process count)
查看已經被編譯的模塊
[root@localhost ~]# httpd -l
Compiled in modules:
core.c
prefork.c
http_core.c
mod_so.c
httpd.conf主配置文件的解釋
ServerTokens OS #返回操作系統類型,如apache/2.0.54(unix)
ServerRoot "/etc/httpd" #服務器配置文件目錄
ServerName 192.168.1.235:80 #服務器主機名
PidFile run/httpd.pid #apache運行進程ID存放
Timeout 60 #超時時間,多少s沒有反應就超時
KeepAlive Off #是否允許一個永久的鏈接,設置爲OFF的時候,不能保持連接功能,傳輸效率比較低,設置爲ON時,可以提高服務器傳輸文件的效率,建議開啓
MaxKeepAliveRequests 100 #設置KeepAlive爲ON時,設置客戶端每次連接允許請求相應最大文件數,默認100個
KeepAliveTimeout 15 #超時時間,同一個客戶端下一個請求15s沒收到就超時
Listen 80 #監聽端口,默認本地IP,如果指定ip寫上IP:80
<IfModule prefork.c>
StartServers 8 #服務開始起啓動8個進程
MinSpareServers 5 #最小空閒5個進程
MaxSpareServers 20 #最多空閒20個進程
ServerLimit 256 #服務器允許配置進程數上線
MaxClients 256 #最大連接數256,超過要進入等候隊列
MaxRequestsPerChild 4000 #每個進程生存期內服務最大的請求數量,0表示用不結束
</IfModule>
<Directory />
Options FollowSymLinks #Options Indexes 目錄瀏覽 FollowSymLinks用連接瀏覽
AllowOverride None #設置爲none,忽略.htaccess
</Directory>
LoadModule auth_basic_module modules/mod_auth_basic.so #載入的庫,模塊
● ● ● ● ● ●
Include conf.d/*.conf #conf.d裏面的conf文件也屬有效配置文件
User apache #apache運行以哪個身份運行
Group apache #apache運行以哪個組的身份運行
ServerAdmin root@localhost #管理員郵箱
DocumentRoot "/var/www/html" #默認的主目錄,如果改動要改動兩處,Directory
<Directory "/var/www/html">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny #這裏默認後者生效,也就是deny生效
Allow from all #這裏說允許所有
</Directory>
LogLevel warn #日誌等級
DirectoryIndex index.html index.html.var #首頁
AccessFileName .htaccess #access文件名
AddDefaultCharset UTF-8 #支持的語言,默認編碼
#配置文件的最後是虛擬主機的字段,其中你大部分字段做個瞭解即可,用到的時候去查即可
檢測配置文件語法
[root@localhost ~]# cat /etc/httpd/conf/httpd.conf | grep "^Listen" //修改web端口爲55667
Listen 55667
[root@localhost ~]# apachectl configtest
httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain for ServerName
Syntax OK
[root@localhost ~]# service httpd reload //切記http服務不可以隨便重啓,修改配置文件要重新載入配置文件
Reloading httpd:
創建一個測試首頁
[root@localhost ~]# cd /var/www/html/
[root@localhost html]# ls
[root@localhost html]# echo "<h1>zhang789.blog.51cto.com</h1>" >> index.html
[root@localhost html]# ll
total 4
-rw-r--r-- 1 root root 33 Oct 6 09:06 index.html
符號鏈接和虛擬目錄
DocumentRoot的參數是指定web發佈文檔的主目錄,在默認情況下,用戶通過http訪問web服務器瀏覽的所有資料都是存在該目錄下,該參數只能設置一個目錄作爲參數值,那麼是不是在Apache中就能有一個目錄存放文檔文件呢?如果文檔根目錄空間不足,要放到其他的文件系統中應該怎麼辦,
符號鏈接
例如:/var/www/html/doc這個目錄,希望吧/usr/share/doc目錄映射成/var/www/html/doc,配置就是一個軟連接就行
[root@localhost html]# ln -s /usr/share/doc/ doc
[root@localhost html]# ll
total 4
lrwxrwxrwx 1 root root 15 Oct 6 09:49 doc -> /usr/share/doc/
-rw-r--r-- 1 root root 33 Oct 6 09:06 index.html
虛擬目錄(別名)
使用虛擬目錄是另一種將根目錄以外的內容加入站點中的辦法,下面舉一個簡單的例子,把/var/log目錄映射成網站根目錄下的/log下
1、打開httpd.conf文件,添加如下內容
Alias /log "/var/log"
<Directory "/var/log/">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
2、重載httpd服務,然後訪問加資源URL/log路徑
頁面重定向
如果用戶經常訪問某個網站的網頁,他很可能會把頁面的URL添加到收藏夾,在每次訪問網站的時候,可以直接點擊收藏夾的記錄訪問,但是如果網站進行了目錄架構的更改,用戶再使用原來的URL訪問時就會出現404頁面無法找到的錯誤,爲了方便用戶能夠使用原來的URL進行訪問,這時就需要頁面重定向了
假設網站有一個doc目錄,現在管理員要對網站的目錄結構就行整理,並把/doc目錄移動到/old-doc目錄下,如果用戶還是訪問原來的URL就會出現404的錯誤,
1、打開httpd.conf配置文件,添加如下內容
Alias /old-doc "/usr/share/doc"
<Directory "/usr/share/doc">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
#指定當用戶訪問/doc目錄遇到404錯誤自動重定向到http://192.168.211.128:55667/old-doc
Redirect 303 /doc http://192.168.211.128:55667/old-doc
2、重載httpd服務
3、使用瀏覽器再次訪問
Apache日誌文件
Apache運行會生成兩個日誌文件,access_log(訪問日誌)error_log(錯誤日誌)
[root@localhost httpd]# pwd
/var/log/httpd
[root@localhost httpd]# ls
access_log error_log
1、訪問日誌文件
Apache的訪問日誌就是記錄web服務器的所有訪問活動(如下圖)
從文件內容可以看出,每一行都記錄了一次訪問記錄,由7個部分組成
192.168.211.1 - - [06/Oct/2016:10:23:26 +0800] "GET /old-doc/ HTTP/1.1" 200 149404 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36"
//客戶端地址、訪問者的標示、訪問者的驗證名字、請求的時間、請求類型、請求的http代碼、發送給客戶端的字節數
7部分詳細說明 客戶端地址
:表明訪問網站的客戶端IP地址 訪問者的標示
:該項一般爲空白,用“-”代替 訪問者驗證的名字
:該項用於記錄訪問者進行身份驗證時提供的名字,一般情況下該項也爲空白 請求的時間
:記錄訪問操作的發生時間 請求類型
:該項記錄了服務器收到是一個什麼類型的請求,一般類型包括GET、post、HEAD 請求的代碼
:通過該項信息可以知道請求是否成功,遇到了什麼樣的問題錯誤,正常情況下,爲200 發送給客戶端的字節數
:表示發送給客戶端的總的字節數,通過檢查該數值是否和文件大小相同,可以知道傳輸是否被中斷
2、錯誤日誌
錯誤日誌是Apache提供的另外一種標準日誌,該日誌記錄了Apache服務運行過程發生的錯誤日誌,httpd.conf配置文件中提供了一下兩個配置參數:
ErrorLog logs/error_log
LogLevel warn
它們分別用於配置錯誤日誌的位置和日誌的級別
日誌的級別說明
嚴重程度 等級 說明
1 emerg 系統不可以用
2 alert 需要立即引起注意的情況
3 crit 危急情況
4 error 錯誤信息
5 warn 警告信息
6 notiee 需要引起注意的情況
7 info 一般信息
8 debug 由運行於debug模式的程序輸出的信息
emerg級別的信息最爲嚴重,debug級別最低,如果用戶吧錯誤日誌設置成warn級別,則嚴重程度由1-5會被記錄下來
從文件內容可以看出,每一行記錄了一個錯誤,由3個部分組成,
時間 錯誤等級 錯誤信息
[Thu Oct 06 10:22:24 2016] [error] [client 192.168.211.1] Directory index forbidden by Options directive: /usr/share/doc/
第一個括號是錯誤發生的時間
2016年10月06 10:22:24 第二個是錯誤等級
:error 第三個是錯誤的內容
:[客戶192.168.211.1]目錄索引選項禁止指令:/usr/share/doc/
Apache安全配置
Apache提供了多種安裝控制手段,包括web訪問控制,用戶登錄密碼設置及.htaccess文件
訪問控制
訪問控制是提高apache服務器安全級別的最有效的手段之一,看下Diertory段,Diertory段用於設置與目錄相關的參數和指令,包括訪問控制和認證
<Diretory 目錄的路徑>
目錄相關的配置參數和指令
</Diretory>
每個Diretory段以<Diretory>
開始</Diretory>
結束,<Diretory>
指定目錄及其裏面的所有文件和子目錄,在段中可以設置與目錄相關的參數和指令,包括訪問控制和認證
<Directory "/var/www/icons">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
1、Allow 指令
Allow指令用於設置那些客戶端可以訪問Apache
Allow for [All/全域名/部分域名/ip地址/網絡地址/cidr地址。。。]
all
表示所有客戶端 全域名
:表示域名對應的客戶端 www.baidu.com 部分域名
:表示域內的所有客戶端 baidu.com IP地址
:如172.16.2.1 網絡地址
:如192.168.1.0/256.356.355.0 CIDR地址
:172.16.20.0/24
2、Deny指令
Deny指令用戶設置拒絕那些客戶端訪問Apache,格式和Allow一樣
3、Order指令
Order指令用於指定訪問規則的先後順序,有一下兩種
Order Allow,Deny;先執行允許訪問規則,在執行拒絕訪問規則
Order Deny,Allow; 先執行拒絕訪問規則,在執行允許訪問規則
實例:
現在,假設網站中一個logo目錄,是登錄網站後臺的目錄,所以網站管理員希望該目錄只能由該網站管理員訪問(192.168.211.1),其他都不能訪問
1、打開httpd.conf配置文件添加如下內容
<Directory "/var/www/html/log">
Options Indexes FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 192.168.211.1
</Directory>
httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain for ServerName
Syntax OK
[root@localhost httpd]# service httpd reload
Reloading httpd:
用戶認證
Apache的用戶認證方式包括基本(Basic)認證和摘要(Digest)認證兩種,摘要認證比基本認證更加安全,但有個別瀏覽器不支持,基本認證很簡單,當用戶在瀏覽器輸入認證模式的URL時候,會彈出一個對話框,要求輸入賬戶密碼,當用戶輸入後,web服務驗證他的正確性,如果正確,則返回頁面,錯誤則返回401頁面
要使用用戶認證,首先要創建好用戶名和密碼,在Apache中提供htpasswd命令用於創建和修改密碼文件,該命令在<apache 安裝目錄>/support目錄下
要在/etc/httpd/conf/下創建一個名爲users的認證密碼文件,並在密碼文件添加sam用戶
[root@localhost ~]# htpasswd -c /etc/httpd/conf/users sam
New password:
Re-type new password:
Adding password for user sam
認證密碼文件創建後,如果再向users文件添加一個ken的用戶 不加-C
[root@localhost ~]# htpasswd /etc/httpd/conf/users ken
New password:
Re-type new password:
Adding password for user ken
與/etc/passwd文件類似,認證密碼都是一行一個
[root@localhost ~]# cat /etc/httpd/conf/users
sam:fGNODsapTMn72
ken:8HenVGxWHKF8A
用戶名:加密後的密碼
htpasswd沒有刪除賬戶指令,直接在配置文件裏面刪除
創建完成認證密碼後,還要對配置文件進行修改,用戶認證是在httpd.conf配置文件中<Directort>
段中進行設置
案例:
現在網站管理員爲了更加安全,加強控制,對log目錄經過sam用戶認證才能訪問
1、在httpd.conf配置文件添加如下內容
<Directory "/var/www/html/log">
Options Indexes FollowSymLinks
AllowOverride None
AuthType Basic //設置認證的方式
AuthName "doc" //設置保護區域的名稱
AuthUserFile /etc/httpd/conf/users //認證密碼的文件
require user sam //指定那些用戶可以進行訪問
Order deny,allow
Deny from all
Allow from 192.168.211.1
</Directory>
2、檢測語法,重載服務
[root@localhost ~]# apachectl configtest
httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain for ServerName
Syntax OK
[root@localhost ~]# service httpd reload
Reloading httpd:
[root@localhost ~]#
虛擬主機
虛擬主機就是指將一臺物理服務器虛擬多臺web服務器,可以有效的節省硬件資源,Apache支持基於IP地址或主機名的虛擬機服務
虛擬主機的介紹
虛擬主機就是將一臺物理服務器虛擬成多臺web服務器,對於一些小規模的網站,通過web虛擬主機技術、可以跟其他網站共享一臺服務器,有效減少系統的運行成本,
比如說,一家從事web託管的公司,他爲企業提供web服務,那麼他肯定不會爲每個企業準備一臺物理服務器,
Apache提供3中虛擬主機方案:
基於IP的虛擬主機服務
,基於主機名的虛擬主機
和基於端口的虛擬主機
基於IP的虛擬主機
基於IP的虛擬主機,服務上面必須設置多個IP地址,服務器根據請求目的的IP地址來判斷請求的是哪個虛擬主機
Apache中是通過httpd.conf配置文件的<VirtualHost>
段來配置虛擬主機服務的
<VirtualHost IP地址:主機名[:端口] IP地址:主機名[:端口]...>
虛擬主機的相關配置參數和指令
<VirtualHost>
案例:
假設一臺服務器上面有兩個IP地址,分別爲192.168.211.128和192.168.211.130,對應www.server1.com和www.server2.com,現在要根據這兩個IP地址來實現虛擬主機
當客戶端訪問192.168.211.128訪問/var/www/html/server1
當客戶端訪問192.168.211.130訪問/var/www/html/server2
問題:
如果服務器只有一個網卡,可以通過單網卡配置多IP來模擬
1、在/var/www/html/server1和server2下,分別生成index.html文件
[root@localhost html]# mkdir server{1,2}
[root@localhost html]# ls
index.html log loganalyze old-doc server1 server2
[root@localhost server1]# cat index.html
<HTML>
<HEAD>
<TITLE> 基於IP的虛擬主機測試 </TITLE>
</HEAD>
<BODY>
基於IP的虛擬主機測試:<FONT SIZE="6">www.server1.com</FONT>
</BODY>
</HTML>
爲了管理方便在/etc/httpd/conf.d/下面創建一個vhost.conf(在httpd.conf主配置裏面有指定,conf.d/*.conf都是可生效的文件)
[root@localhost conf.d]# vim /etc/httpd/conf.d/vhost.conf
<VirtualHost 192.168.211.128>
ServerAdmin [email protected]
DocumentRoot /var/www/html/server1
<Directory"/var/www/html/server1">
AllowOverride none
Allow from all
Order Allow,deny
</Directory>
ErrorLog /log/httpd/vhost_log/error_server1.log
</VirtualHost>
<VirtualHost 192.168.211.130>
ServerAdmin [email protected]
DocumentRoot /var/www/html/server2
<Directory"/var/www/html/server2">
AllowOverride none
Allow from all
Order Allow,deny
</Directory>
ErrorLog /log/httpd/vhost_log/error_server2.log
</VirtualHost>
重載Apache服務訪問
基於主機名的虛擬主機(域名)
大多數物理機IP有限,基於IP這種方式太浪費IP資源了,更多的都是使用基於域名的虛擬主機服務
http1.1協議中,增加了對主機名的虛擬主機服務的支持,具體的說,當客戶端向web服務器發送請求時,客戶端想要訪問的主機名也通過請求頭中的Host語句傳遞給web服務器,web服務器接受到這個請求後,通過檢查Host語言來判斷客戶端請求的是哪個虛擬主機
與基於IP地址虛擬主機的配置方法不同,用戶必須在conf配置文件使用NameVirtualHost參數 NameVirtualHost IP地址/主機名[:端口]
NameVirtualHost 192.168.211.128
<VirtualHost 192.168.211.128>
ServerName www.server1.com
DocumentRoot /var/www/html/server1
<Directory "/var/www/html/server1">
AllowOverride none
Allow from all
Order Allow,deny
</Directory>
ErrorLog /log/httpd/vhost_log/error_server1.log
</VirtualHost>
NameVirtualHost 192.168.211.130
<VirtualHost 192.168.211.130>
ServerName www.server2.com
DocumentRoot /var/www/html/server2
<Directory "/var/www/html/server2">
AllowOverride none
Allow from all
Order Allow,deny
</Directory>
ErrorLog /log/httpd/vhost_log/error_server2.log
</VirtualHost>
檢查配置語法,重載httpd服務
基於端口的虛擬主機
在同一IP,同一主機名下,使用監聽不同端口,訪問時需要加訪問的端口。使用不多,一般用來做內網測試使用
配置文件
<VirtualHost 192.168.211.128:80>
ServerName www.server1.com
DocumentRoot /var/www/html/server1
<Directory "/var/www/html/server1">
AllowOverride none
Allow from all
Order Allow,deny
</Directory>
ErrorLog /log/httpd/vhost_log/error_server1.log
</VirtualHost>
Listen 8080 //添加監聽端口
<VirtualHost 192.168.211.128:8080>
ServerName www.server2.com
DocumentRoot /var/www/html/server2
<Directory "/var/www/html/server2">
AllowOverride none
Allow from all
Order Allow,deny
</Directory>
ErrorLog /log/httpd/vhost_log/error_server2.log
</VirtualHost>
重載服務