新聞中心
apache--目前用于實(shí)現(xiàn)http服務(wù)的軟件有許多,包括主流的Apache、Nginx,還有微軟的IIS等,這篇文章只介紹Apache實(shí)現(xiàn)的各種功能的http服務(wù),通過Apache的功能說明配置文件中每個(gè)指令的具體含義和用法。

創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比正寧網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式正寧網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋正寧地區(qū)。費(fèi)用合理售后完善,10多年實(shí)體公司更值得信賴。
目錄
- Apache的功能特性
- 開啟Apache
- 變換Apache的處理模式(MPM)
- 配置文件中的全局環(huán)境配置
- 多樣化設(shè)置目錄的顯示內(nèi)容
- 路徑別名
- 基于用戶(組)認(rèn)證的訪問控制
- 虛擬主機(jī)的實(shí)現(xiàn)
一、Apache的功能特性
1.高度模塊化
Apache支持把更多的功能以模塊化的形式存在,通過加載和卸載模塊完成不同功能的增加和刪除,類似于Linux內(nèi)核的模塊化,可以加載和卸載內(nèi)核的驅(qū)動(dòng)模塊。構(gòu)成了core+modules模型;
2.支持動(dòng)態(tài)加載和卸載模塊
就是類似熱拔插一樣的功能,可以實(shí)現(xiàn)不重啟服務(wù)的情況加載和卸載模塊并使其生效。
3.支持多路處理模塊MPM
Apache可以有三種(處理)工作模式,分別為:
prefork---多進(jìn)程I/O模型,一個(gè)進(jìn)程處理一個(gè)請(qǐng)求,是Apache的默認(rèn)工作模式
該工作模式下存在一個(gè)主進(jìn)程和多個(gè)子進(jìn)程,那些個(gè)子進(jìn)程由主進(jìn)程生成和回收。主進(jìn)程負(fù)責(zé)生成套接字、管理子進(jìn)程,但是不負(fù)責(zé)處理請(qǐng)求,主進(jìn)程由root身份執(zhí)行;子進(jìn)程才是真正負(fù)責(zé)處理請(qǐng)求的角色,一開始會(huì)有多個(gè)空閑子進(jìn)程等待處理請(qǐng)求,一個(gè)子進(jìn)程處理一個(gè)請(qǐng)求,子進(jìn)程由apache用戶執(zhí)行。
worker----復(fù)用多進(jìn)程I/O模型
該工作模式下,存在一個(gè)主進(jìn)程,同樣地主進(jìn)程負(fù)責(zé)管理子進(jìn)程,并不處理請(qǐng)求,主進(jìn)程生成多個(gè)子進(jìn)程,同時(shí)每個(gè)子進(jìn)程生成多個(gè)線程,一個(gè)線程處理一個(gè)請(qǐng)求,這樣假設(shè)子進(jìn)程數(shù)為M,每個(gè)子進(jìn)程的線程數(shù)為N,則此工作模式可以并發(fā)處理M*N個(gè)請(qǐng)求。該模式下占用內(nèi)存小,多用于大型網(wǎng)站。
event-----事件驅(qū)動(dòng)模型
event和worker工作類似,都是并發(fā)處理M*N個(gè)請(qǐng)求。但是event做出的改進(jìn)是,每個(gè)子進(jìn)程中對(duì)線程劃分的更加詳細(xì),有管理線程和服務(wù)線程兩種,為什么要這樣設(shè)計(jì)呢,我們知道HTTP1.1版本默認(rèn)為持久連接keepalive,如果建立連接卻沒有發(fā)送請(qǐng)求,就會(huì)一直占用此連接的帶寬直到規(guī)定時(shí)間才會(huì)釋放,因此加入了管理進(jìn)程,專門監(jiān)視keepalive類型的服務(wù)線程,當(dāng)發(fā)生真正的請(qǐng)求的時(shí)候,管理線程把請(qǐng)求轉(zhuǎn)交給服務(wù)線程處理,處理完畢后管理線程會(huì)釋放服務(wù)線程的資源。增加了帶寬的利用率。
4.虛擬主機(jī)
有些網(wǎng)站的訪問量低的可憐,這么低的訪問量如果專門用一臺(tái)服務(wù)器來搭建的話,實(shí)在是劃不來,因此就想到了在一臺(tái)服務(wù)器上搭建多個(gè)網(wǎng)站,多個(gè)網(wǎng)站共用一臺(tái)服務(wù)器降低資源消耗,這樣的功能就叫做虛擬主機(jī)功能。一個(gè)服務(wù)器搭建多個(gè)網(wǎng)站,每個(gè)網(wǎng)站對(duì)應(yīng)不同的域名,外部客戶端想要訪問的時(shí)候,DNS會(huì)將這些不同網(wǎng)站的域名解析到同一臺(tái)服務(wù)器,服務(wù)器根據(jù)HTTP請(qǐng)求的首部行中的域名信息,將請(qǐng)求轉(zhuǎn)至對(duì)應(yīng)的目錄資源。
小tips:虛擬主機(jī)和虛擬機(jī)的區(qū)別->虛擬主機(jī)是一臺(tái)主機(jī)上邊部署多個(gè)網(wǎng)站的功能,支撐這么多網(wǎng)站的主機(jī)運(yùn)行的是同一個(gè)操作系統(tǒng);而虛擬機(jī)是一個(gè)系統(tǒng)通過VMware、LVM等技術(shù)虛擬出來的多個(gè)主機(jī),這些虛擬的主機(jī)可以運(yùn)行不同的操作系統(tǒng)。
5.CGI通用網(wǎng)關(guān)接口
支持動(dòng)態(tài)網(wǎng)頁。這樣說會(huì)很晦澀,先來說什么是網(wǎng)關(guān),網(wǎng)關(guān)就是兩個(gè)網(wǎng)段內(nèi)的主機(jī)進(jìn)行通信的交界口,同一網(wǎng)段內(nèi)的主機(jī)通信時(shí)是不需要經(jīng)過網(wǎng)關(guān)的,但是一旦不同網(wǎng)段的主機(jī)進(jìn)行通信,就需要把數(shù)據(jù)先交給網(wǎng)關(guān),讓網(wǎng)關(guān)轉(zhuǎn)交給另一個(gè)網(wǎng)段。同理再來看CGI,web服務(wù)器只能發(fā)送靜態(tài)頁面,當(dāng)服務(wù)器收到例如index.php的文件請(qǐng)求時(shí),服務(wù)器總不能把index.php發(fā)送出去吧,因?yàn)檫@是一個(gè)動(dòng)態(tài)文件啊,此時(shí)CGI會(huì)把index.php處理成一種規(guī)定的數(shù)據(jù)格式,然后交給php解釋器執(zhí)行,隨后再把執(zhí)行后的數(shù)據(jù)經(jīng)過CGI處理,最后把結(jié)果由服務(wù)端發(fā)送給客戶端,這里的CGI就是起到了靜態(tài)請(qǐng)求和動(dòng)態(tài)請(qǐng)求的轉(zhuǎn)換接口。
6.支持反向代理
7.可以實(shí)現(xiàn)負(fù)載均衡
8.支持路徑別名
為了不讓用戶知道服務(wù)端資源的真正目錄,可以對(duì)目錄做一個(gè)別名,用戶只需要知道這個(gè)別名即可,別名會(huì)自動(dòng)跳轉(zhuǎn)到真正的目錄。
9.可以實(shí)現(xiàn)安全認(rèn)證機(jī)制
二、開啟Apache
CentOS中默認(rèn)都會(huì)提供Apache的rpm包,這樣我們安裝Apache就會(huì)很簡(jiǎn)單了,直接yum安裝,
[root@CentOS6 ~]# yum -y install httpd
...
# 出現(xiàn)如下信息表示安裝成功
Installed:
httpd.x86_64 0:2.2.15-59.el6.centos
Complete!
那么如何利用Apache開啟http服務(wù)呢,我們先來看看http相關(guān)的文件,安裝成功之后會(huì)在/etc/httpd/目錄下多了幾個(gè)子目錄,如
下圖:
我們會(huì)發(fā)現(xiàn)日志、模塊、運(yùn)行狀態(tài)的目錄都是軟鏈接文件,進(jìn)入各自真正的目錄后,日志目錄下都是xxx_log-xxx的文件,模塊目錄下都是xxx.so的文件,但是運(yùn)行狀態(tài)目錄下沒有文件,下面來具體說一說該運(yùn)行狀態(tài)目錄下的文件的作用,
如果把http服務(wù)開啟之后生成的httpd.pid刪除,再次查看httpd的狀態(tài),顯示了錯(cuò)誤信息,
如果嘗試停止httpd,雖然會(huì)出現(xiàn)顯示服務(wù)停止成功OK的標(biāo)志,但是httpd進(jìn)程還存在,說明stop失敗,
現(xiàn)在手動(dòng)恢復(fù)該進(jìn)程文件,一切又恢復(fù)正常。說明start、stop、status的httpd服務(wù)命令都是依靠這個(gè)httpd.pid進(jìn)程文件來對(duì)指定的進(jìn)程生效,如果把這個(gè)進(jìn)程文件刪除,將無法識(shí)別httpd的進(jìn)程,也就無法對(duì)httpd進(jìn)程進(jìn)行操作。由此我們也可以認(rèn)識(shí)到判斷一個(gè)服務(wù)是否在運(yùn)行最準(zhǔn)確的方法是查看相應(yīng)端口監(jiān)聽狀態(tài)。
小tips:httpd.pid進(jìn)程文件是httpd主進(jìn)程開啟之后將PID寫入的,主進(jìn)程終止之后該進(jìn)程文件會(huì)刪除。如果在主進(jìn)程開啟之前隨意手動(dòng)寫了一個(gè)PID至進(jìn)程文件中,則會(huì)在主進(jìn)程開啟之后覆蓋手動(dòng)寫的PID。
總結(jié):另外Apache本身也會(huì)提供開啟http服務(wù)的程序,該程序存放位置為/usr/sbin/apachectl,該文件為shell腳本,我們也可以通過該腳本達(dá)成和/etc/init.d/httpd同樣的效果。
三、變換Apache的處理模式(MPM)
當(dāng)前的Apache僅僅支持prefork模式和worker模式,event模式目前還在測(cè)試階段,因此我們主要關(guān)心前兩種模式。那么怎么查看Apache的當(dāng)前的處理模式呢,我們可以利用開啟服務(wù)的命令來判斷當(dāng)前的處理模式。首先確保http服務(wù)屬于開啟狀態(tài),然后利用pstree和ps命令查看,
我們可以確定Apache默認(rèn)在不修改的情況下會(huì)工作在prefork模式下,至于變換Apache的處理模式則要用到/etc/sysconfig/httpd文件,只需要修改文件中HTTPD參數(shù)然后重啟http服務(wù),就可以變換工作模式了。
更改之后在利用pstree和ps命令查看不同。
四、配置文件中全局環(huán)境設(shè)置
Apache中提供了兩個(gè)配置文件,分別為/etc/httpd/conf/httpd.conf(主要),/etc/httpd/conf.d/*.conf(額外,用戶可以在此修改配置文件),其中主要的配置文件多用來設(shè)定全局指令,不建議普通用戶在主配置文件中修改;對(duì)于額外的配置文件,可以把對(duì)特定功能的指令配置設(shè)定在此目錄下,并且文件必須以.conf結(jié)尾。
主配置文件中的內(nèi)容分為三大部分,分別為全局環(huán)境配置、主服務(wù)的配置、虛擬主機(jī)的配置,對(duì)應(yīng)于section{1..3},其中全局環(huán)境(section1)配置中各個(gè)指令的含義如下:
ServerTokens 允許在客戶端顯示的服務(wù)器版本信息,如下圖所示,
還有其他的參數(shù)如下:顯示的版本信息依次更加詳細(xì),建議使用Prod保護(hù)服務(wù)器端的安全。
+------+-----------------------------+
| Prod | Apache |
+------+-----------------------------+
| Major| Apache/2 |
+------+-----------------------------+
| Minor| Apache/2.2 |
+------+-----------------------------+
| Min | Apache/2.2.15 |
+------+-----------------------------+
| OS | Apache/2.2.15 (CentOS) |
+------+-----------------------------+
| Full | Apache/2.2.15 (CentOS) DAV/2|
+------+-----------------------------+
Listen [IP:]PORT httpd監(jiān)聽的IP和端口,IP缺省表示所有IP,一般為所有IP:80
該指令不能注釋(#)不寫,如果該指令缺省不寫,啟動(dòng)服務(wù)會(huì)出現(xiàn)異常。
ServerRoot 定義配置文件的根目錄,一般為/etc/httpd/
Timeout 連接狀態(tài)能夠持續(xù)的時(shí)間
AddDefaultCharset 定義httpd傳輸數(shù)據(jù)的編碼格式,一般為UTF-8
編碼格式不對(duì)應(yīng)會(huì)在瀏覽器上顯示亂碼,只能修改瀏覽器的編碼格式
KeepAlive 是否開啟持久連接的指令,默認(rèn)On開啟狀態(tài),Off為關(guān)閉狀態(tài)
每次從服務(wù)器下載文件的時(shí)候都需要建立一次TCP連接,如果為Off,下載完畢后會(huì)斷開此次TCP連接;如果為On,下載完畢后會(huì)繼續(xù)保持此次TCP連接。
MaxKeepAliveRequests 一次TCP連接能夠發(fā)送的最大請(qǐng)求數(shù),例如值為3時(shí),可以利用GET發(fā)送4次請(qǐng)求,第1次不算哦??!
該參數(shù)只有在KeepAlive設(shè)置為On的時(shí)候才會(huì)生效,設(shè)置為0表示沒有限制
KeepAliveTimeout 在本次TCP連接中等待下一個(gè)請(qǐng)求的時(shí)間,超過會(huì)斷開此次TCP連接
該參數(shù)同樣只有在KeepAlive設(shè)置為On的時(shí)候才會(huì)生效
可以利用telnet測(cè)試keepalive:
telnet ip port # 如果沒有修改的話,則是80端口
GET /xxx1 http/1.1 # xxx1為/var/www/html下的一個(gè)文本文件
host:xxxx # xxxx為客戶端的IP地址
上述命令完畢之后需要按shift+enter鍵才能返回結(jié)果
MPM的參數(shù)配置,具體的各個(gè)參數(shù)含義如下:
StartServers 啟動(dòng)httpd服務(wù)會(huì)開啟幾個(gè)進(jìn)程
MinSpareServers 進(jìn)程隊(duì)列中最小處于預(yù)備狀態(tài)的進(jìn)程數(shù)
MaxSpareServers 進(jìn)程隊(duì)列中最大處于預(yù)備狀態(tài)的進(jìn)程數(shù)
ServerLimit 服務(wù)器開啟處理http請(qǐng)求的最大進(jìn)程數(shù)
MaxClients 可以同時(shí)連接到httpd服務(wù)的最大連接數(shù)量,和ServerLimit的數(shù)值一樣,默認(rèn)最大值為256
MaxRequestsPerChild 每個(gè)子進(jìn)程處理http請(qǐng)求的最大數(shù)量,超過該值會(huì)釋放子進(jìn)程,0表示無限制
下圖所示為prefork處理模式下的進(jìn)程的狀態(tài),可以讓多個(gè)終端利用telnet命令來連接服務(wù)端并保持連接,測(cè)試進(jìn)程數(shù)量的變化:
修改/etc/sysconfig/httpd文件,再來看看worker模式下的進(jìn)程/線程狀態(tài)
但是4個(gè)子進(jìn)程*25個(gè)線程=100個(gè)線程,這樣就會(huì)超過75個(gè)線程的限制,因此會(huì)出現(xiàn)下圖所示的情況,剛開啟httpd就有一個(gè)進(jìn)程被殺死。不過手速要快,不然看不到這種情況。
LoadModule xxx.so 模塊的路徑 表示啟動(dòng)httpd服務(wù)時(shí)加載的模塊
httpd -l # 查看加載的靜態(tài)模塊
httpd -M # 查看加載的靜態(tài)和動(dòng)態(tài)模塊
例如關(guān)于認(rèn)證的auth_basic_module模塊,修改之前httpd -M可以看到該模塊加載成功,但是把他注釋掉之后,再利用httpd -M可以看到實(shí)時(shí)的卸載。
Include 可以讀入的配置文件,/etc/httpd/conf.d/*.conf之所以可以充當(dāng)配置文件的原因
User apache / Group apache 處理http請(qǐng)求的用戶和用戶組都為Apache
小tips:可以利用httpd -t 或者service httpd configtest 來檢測(cè)配置文件的語法錯(cuò)誤,檢測(cè)通過則會(huì)顯示Syntax OK的標(biāo)志,但是只能檢測(cè)文件的語法錯(cuò)誤,并不能保證服務(wù)能夠正常的運(yùn)行。
五、多樣化設(shè)置目錄的顯示內(nèi)容
ServerName 指定服務(wù)器的域名
剛安裝Apache啟動(dòng)的時(shí)候,會(huì)在start部分停留好久,之后會(huì)報(bào)兩個(gè)錯(cuò)誤,但是不影響服務(wù)的正產(chǎn)啟動(dòng),這種情況就是ServerName沒有指定,導(dǎo)致DNS解釋失敗,因此我們需要在ServerName指令后添加主機(jī)名:port,然后就不會(huì)有上訴的兩個(gè)錯(cuò)誤
ServerAdmin 管理員的郵箱服務(wù)器,錯(cuò)誤信息都會(huì)發(fā)送至該服務(wù)器
UseCanonicalName 建議設(shè)置為Off,如果為On,則httpd只認(rèn)定ServerName
5.1 設(shè)置全局站點(diǎn)首頁
因?yàn)閃eb服務(wù)器說白了就是讓互聯(lián)網(wǎng)上的其他用戶訪問自己目錄下的文件,但是不可能讓用戶訪問所有的文件吧,因此就需要設(shè)置用戶可以訪問的目錄和目錄權(quán)限,如下:
DocumentRoot 定義用戶訪問的根目錄,一般為/var/www/html
DirectoryIndex 定義用戶訪問一個(gè)網(wǎng)站的首頁,默認(rèn)為index.html
什么是首頁,就是用戶在網(wǎng)址列只輸入到目錄,因?yàn)闆]有指定要訪問的文件,因此會(huì)顯示DirectoryIndex設(shè)置的文件,文件顯示的內(nèi)容就是首頁。
可以設(shè)置多個(gè)首頁,默認(rèn)顯示第一個(gè)文件
DocumentRoot "/var/www/html"
DirectoryIndex index.html index.html.var
上面內(nèi)容的意思是只輸入域名或者IP地址后(后面沒有跟具體的文件名),則默認(rèn)進(jìn)入/var/www/html目錄下,并且如果目錄下存在index.html/index.html.var的文件,則在網(wǎng)址列的URL僅輸入到目錄的時(shí)候,會(huì)去顯示該目錄下的index.html/index.html.var文件(同時(shí)存在按照先后順序),即DirectoryIndex指令的值會(huì)遞歸到每個(gè)目錄。
5.2 設(shè)置指定目錄的首頁
上面設(shè)定首頁的方法是對(duì)全部目錄生效的,那如果只針對(duì)特定目錄設(shè)置不同的首頁內(nèi)容,該怎么做呢?配置文件中為我們提供了 ... 的指令,他表示的含義是對(duì)目錄進(jìn)行訪問控制,具體用法如下:
[root@CentOS6 conf.d]# pwd
/etc/httpd/conf.d
[root@CentOS6 conf.d]# cat isolinux.conf
DirectoryIndex splash.jpg
上邊已經(jīng)說過,建議修改指令參數(shù)在/etc/httpd/conf.d/目錄下新增加文件進(jìn)行修改,我在該目錄下新建了isolinux.conf的文件,在該文件中利用目錄的訪問控制加入指定目錄的DirectoryIndex為splash.jpg(圖片格式),而全局的DirectoryIndex仍然為index.html保持不變,效果如下:
5.3 設(shè)置目錄的特殊訪問控制
當(dāng)然指令的功能不止于上面設(shè)置目錄首頁的功能,還有更多的功能可以借助不同的參數(shù)來實(shí)現(xiàn),例如Options,AllowOverride等。
Options 設(shè)定目錄能夠進(jìn)行的動(dòng)作的參數(shù),選項(xiàng)如下:
Indexes 如果該目錄內(nèi)沒有找到設(shè)定為首頁的文件,則將該目錄內(nèi)的所有文件的索引列出來,即該目錄下的每個(gè)文件名
FollowSymLinks 字面意思:跟蹤符號(hào)鏈接,就是可以訪問到該鏈接文件的源文件,如果該鏈接文件指向了/var/www/html外的其他文件,該選項(xiàng)可以使其生效。
All 全部允許
None 全部禁用
Options選項(xiàng)是在配置文件中生效的,那么AllowOverride則是在客戶端要訪問的目錄內(nèi)生效的,現(xiàn)在配置文件中利用AllowOverride指定能夠生效的選項(xiàng),然后在指定目錄內(nèi)添加.htaccess,在該文件中設(shè)定訪問控制選項(xiàng)。
其實(shí)/etc/httpd/conf/httpd.conf文件中的AccessFileName指令定義了 .htaccess文件。
AllowOverride 允許.htaccess文件可以覆蓋主配置文件的選項(xiàng)設(shè)定,實(shí)現(xiàn)避免多個(gè)個(gè)人首頁目錄維護(hù)同時(shí)修改主配置文件
主配置文件需要root身份才可以修改,主配置文件需要重啟服務(wù)才會(huì)生效,因此加入了.htaccess文件,只需要在該文件中進(jìn)行修改用以覆蓋主配置文件的參數(shù)設(shè)定
All 允許所有
None 全部禁止,則.htaccess文件失效
AuthConfig 只允許用戶認(rèn)證可以被覆蓋
Limit Order可以被覆蓋
Indexes 允許Indexes可以被覆蓋,這里的Indexes和Options里的Indexes不是同一個(gè)意思。
Options 允許目錄可以進(jìn)行的動(dòng)作
[root@CentOS6 conf.d]# pwd
/etc/httpd/conf.d
[root@CentOS6 conf.d]# cat root.conf # 新添加的root.conf配置文件
AllowOverride Options Indexes # 允許Indexes選項(xiàng)
[root@CentOS6 html]# pwd
/var/www/html
[root@CentOS6 html]# cat .htaccess # 在指定目錄下創(chuàng)建.htaccess文件
Options Indexes
可以達(dá)到和直接在配置文件里指定Options Indexes同樣的效果。
小tips:在這里說說明一下AllowOverride中的選項(xiàng)中Option Indexes和Indexes的區(qū)別,Option Indexes的具體實(shí)現(xiàn)已經(jīng)在上例中說了,是用來實(shí)現(xiàn)顯示目錄的文件名的;現(xiàn)在來看看Indexes的用法
[root@CentOS6 conf.d]# pwd
/etc/httpd/conf.d
[root@CentOS6 conf.d]# cat root.conf
AllowOverride Indexes
[root@CentOS6 html]# pwd
/var/www/html
[root@CentOS6 html]# cat .htaccess
DirectoryIndex index.html
重啟服務(wù),本機(jī)訪問127.0.0.1,可以看到出現(xiàn)了首頁內(nèi)容,由此可以得出Indexes是可以來用來實(shí)現(xiàn)目錄首頁的功能的。
5.4 根據(jù)客戶端設(shè)置訪問控制
Order 根據(jù)不同的客戶端IP設(shè)置不同的訪問權(quán)限,Order選項(xiàng)需要寫到
還可以實(shí)現(xiàn)同一個(gè)IP可以訪問不同的目錄
Order定義處理順序,allow from/deny from表示具體的策略
Order deny,allow 拒絕所有,允許特定
Order allow,deny 允許所有,拒絕特定
例如:
Order allow,deny
拒絕所用訪問
Order deny,allow
允許所有訪問
Order allow,deny
allow from all
deny from 192.168.138.150
允許所有訪問,但是192.168.138.150無法訪問
Order deny,allow
deny from 192.168.138.150
allow from all
允許所有訪問
Order deny,allow
deny from 192.168.138.0/24
allow from 192.168.138.150
拒絕192.168.138.0/24網(wǎng)段的所有主機(jī)訪問,但是允許192.168.138.150訪問,當(dāng)出現(xiàn)在一個(gè)交叉集的時(shí)候,后者會(huì)覆蓋前者,交叉集外的仍然生效。
5.5 目錄內(nèi)文件的訪問控制
Apache不僅可以實(shí)現(xiàn)目錄的訪問控制,還可以實(shí)現(xiàn)目錄內(nèi)特定文件的訪問控制,這里借助的是
[root@CentOS6 conf.d]# pwd
/etc/httpd/conf.d
[root@CentOS6 conf.d]# cat isolinux.conf
Options Indexes FollowSymlinks
隨后更改isolinux.conf文件
[root@CentOS6 conf.d]# pwd
/etc/httpd/conf.d
[root@CentOS6 conf.d]# cat isolinux.conf
Options Indexes FollowSymlinks
Order allow,deny # 表示拒絕所有人訪問
URL的訪問控制
支持正則表達(dá)式的URL的訪問控制
六、路徑別名
路徑別名可以隱藏服務(wù)器上的真實(shí)路徑,當(dāng)收到訪問該別名的請(qǐng)求時(shí),服務(wù)器自動(dòng)跳轉(zhuǎn)到真實(shí)的目錄下返回資源給客戶端,這一過程對(duì)客戶端是透明的。
Alias /xxx "實(shí)際目錄" 網(wǎng)站根目錄下的xxx目錄會(huì)自動(dòng)鏈接到后邊的實(shí)際目錄
例如:Alias /icons/ "/var/www/icons/"
網(wǎng)址列輸入http://hostname/icons,會(huì)訪問到/var/www/icons/目錄下的文件,而實(shí)際上/var/www/html/icons目錄下并沒有文件
在/etc/httpd/conf/httpd.conf主配置文件中默認(rèn)存在這些指令,首先要在/var/www/html/目錄下創(chuàng)建icons目錄
[root@CentOS6 html]# pwd
/var/www/html
[root@CentOS6 html]# mkdir icons
ScriptAlias /xxx "實(shí)際目錄" 和Alias類似,只不過該實(shí)際目錄下存放的是具有執(zhí)行能力的文件
例如:ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
七、基于用戶(組)認(rèn)證的訪問控制
每個(gè)網(wǎng)站都會(huì)有后臺(tái)管理員管理網(wǎng)站后臺(tái)的一些工作,但是網(wǎng)站后臺(tái)不是每個(gè)用戶都可以登錄,因此需要設(shè)置用戶的訪問控制,實(shí)現(xiàn)用戶認(rèn)證的功能。具體的設(shè)定如下:
[root@CentOS6 conf.d]# cat isolinux.conf
AuthType Basic # Basic表示明文
AuthName "isolinux"
AuthUserFile "/etc/httpd/conf.d/.htuser" # 存放用戶和密碼的文件
Require User Bob # 表示只有后邊指定的用戶才可以登錄,Valid-User表示只要輸入密碼正確就可以登錄
# htpasswd命令創(chuàng)建兩個(gè)用戶Bob Alice
[root@CentOS6 conf.d]# htpasswd -cm /etc/httpd/conf.d/.htuser Bob # -c表示首次創(chuàng)建的時(shí)候指定的用戶文件,-m 表示MD5加密
New password:
Re-type new password:
Adding password for user Bob
[root@CentOS6 conf.d]# htpasswd -m /etc/httpd/conf.d/.htuser Alice # 第二次創(chuàng)建用戶的時(shí)候不需要加-c,否則會(huì)覆蓋文件中的其他用戶
New password:
Re-type new password:
Adding password for user Alice
[root@CentOS6 conf.d]# cat .htuser
Bob:$apr1$QO7u9/CG$tWj182TGwOBXg6.EIi36/1
Alice:$apr1$DPDl0yte$a7jtviDXWzpnfEped6VYh1
然后重啟httpd,會(huì)出現(xiàn)如下效果,當(dāng)輸入指定的用戶Bob和密碼的時(shí)候,才能夠進(jìn)入isolinux目錄
下面的是基于用戶組認(rèn)證的訪問控制
[root@CentOS6 conf.d]# pwd
/etc/httpd/conf.d
[root@CentOS6 conf.d]# cat isolinux.conf
AuthType Basic
AuthName "isolinux"
AuthUserFile "/etc/httpd/conf.d/.htuser"
AuthGroupFile "/etc/httpd/conf.d/.htgroup" # 新增加的組文件
Require Group group1
[root@CentOS6 conf.d]# cat .htgroup # 將Bob和Alice加入組
group1:Bob Alice
重啟服務(wù)之后,只要是組里邊的用戶都可以登錄isolinux目錄,同時(shí)Alice也可以(上個(gè)例子中的Alice是不可以登錄)。
基于客戶端IP和用戶(組)的雙重認(rèn)證,需要借助選項(xiàng)Satisfy,
[root@CentOS6 conf.d]# pwd
/etc/httpd/conf.d
[root@CentOS6 conf.d]# cat isolinux.conf
Order Deny,Allow
deny from all
allow from 172.18.251.124 # 只允許172.18.251.124的IP能夠登錄該isolinux目錄
AuthType Basic
AuthName "isolinux"
AuthUserFile "/etc/httpd/conf.d/.htuser"
AuthGroupFile "/etc/httpd/conf.d/.htgroup"
Require Group group1 # 保持上邊的例子不變,仍然為Bob Alice
Satisfy Any # Any表示只要符合其中一項(xiàng)即可,All表示必須同時(shí)滿足IP和用戶(組)才能登錄
如下圖所示,訪問(服務(wù)端IP)172.18.250.183/isolinux,因?yàn)榭蛻舳薎P滿足要求,因此就不需要通過用戶認(rèn)證。滿足其一即可。
八、虛擬主機(jī)的實(shí)現(xiàn)
虛擬主機(jī)的實(shí)現(xiàn)有三種實(shí)現(xiàn)方案,分別為
基于IP:每個(gè)虛擬主機(jī)至少一個(gè)IP
基于Port:每個(gè)虛擬主機(jī)至少一個(gè)獨(dú)立的Port
基于域名:每個(gè)虛擬主機(jī)至少一個(gè)域名
8.1 基于IP的虛擬主機(jī)
[root@CentOS6 conf.d]# pwd
/etc/httpd/conf.d
[root@CentOS6 conf.d]# cat virtualhost.conf
DocumentRoot/var/www/html
Options Indexes
DocumentRoot/var/www/error
Options Indexes
[root@CentOS6 www]# pwd
/var/www
[root@CentOS6 www]# ls
cgi-bin error html icons manual
# 然后重啟服務(wù)
8.2 基于Port的虛擬主機(jī)
這種方法是基于一個(gè)ip上綁定多端口來實(shí)現(xiàn)的
[root@CentOS6 conf.d]# cat virtualhost.conf
Listen 192.168.138.254:8090 # 設(shè)置監(jiān)聽的端口號(hào)
Listen 192.168.138.254:8080
DocumentRoot/var/www/html
Options Indexes
DocumentRoot/var/www/error
Options Indexes
可以看到同一IP的不同端口,訪問的資源不同
小tips:設(shè)置好基于port的虛擬主機(jī)后,重啟httpd會(huì)失敗,錯(cuò)誤信息如下
(13)Permission denied: make_sock: could not bind to address 192.168.138.254:8090
no listening sockets available, shutting down
able to open logs
這是由于SELinux的緣故,需要關(guān)閉SELinux,httpd就可以正常啟動(dòng)了。
/etc/httpd/conf.d/welcome.conf
8.3 基于域名的虛擬主機(jī)
一個(gè)IP上對(duì)應(yīng)多個(gè)域名,不同的域名對(duì)應(yīng)各自的站點(diǎn),先來配置httpd的配置文件,www.a.linux.com對(duì)應(yīng)/var/www/html目錄,www.b.linux.com對(duì)應(yīng)/var/www/error目錄,
[root@CentOS6 conf.d]# pwd
/etc/httpd/conf.d
[root@CentOS6 conf.d]# cat virtualhost.conf
NameVirtualHost *:80 # 加入NameVirtualHost指令
DocumentRoot/var/www/html
ServerName www.a.linux.com # 指定該虛擬主機(jī)的域名
Options Indexes
DocumentRoot/var/www/error
ServerName www.b.linux.com
OptionsIndexes
接下來回到windows主機(jī)的瀏覽器進(jìn)行設(shè)置,因?yàn)檫@里沒有配置DNS服務(wù)器,所有需要手動(dòng)的將www.a.linux.com和www.b.linux.com的IP-192.168.138.254添加到hosts文件中,windows中該文件在C:\Windows\System32\drivers\etc的目錄下的hosts文件,我們修改
如下:
瀏覽器測(cè)試如下:會(huì)發(fā)現(xiàn)不同域名訪問的結(jié)果不一樣。
小tips:Apache的功能還有很多,關(guān)于更加詳細(xì)的功能實(shí)現(xiàn)的指令我們可以借助Apache提供的文檔(不是man哦),而是Apache額外提供的一個(gè)軟件包,我們需要安裝才能夠查閱,這個(gè)軟件就是httpd-manual,
yum -y install httpd-manual
安裝成功之后會(huì)在/etc/httpd/conf.d/目錄下多出一個(gè)manual.conf的文件,文件內(nèi)容如下,其實(shí)就是給我們提供了一個(gè)網(wǎng)頁
[root@CentOS6 conf.d]# cat manual.conf
#
# This configuration file allows the manual to be accessed at
# http://localhost/manual/
#
AliasMatch ^/manual(?:/(?:de|en|fr|ja|ko|ru))?(/.*)?$ "/var/www/manual$1"
Options Indexes
AllowOverride None
Order allow,deny
Allow from all
們可以再網(wǎng)址列輸入IP/manusl,可以在提供的網(wǎng)頁里邊查找功能的設(shè)置方法。
關(guān)于Apache的一些文件的作用:
/etc/httpd/modules
modules -> /usr/lib64/httpd/modules
Apache所支持的模塊都包含于該目錄下
/etc/httpd/run/httpd.pid
/etc/httpd/run/ -> /var/run/
Apache開啟http服務(wù)的進(jìn)程文件
/var/www/html/
初始設(shè)置的首頁目錄
/var/www/error/
錯(cuò)誤信息所在目錄
/var/www/icons/
Apache的一些圖標(biāo)都存放在該目錄下
/var/www/cgi-bin/
可執(zhí)行的網(wǎng)頁程序放置的目錄
/usr/sbin/httpd
二進(jìn)制執(zhí)行文件
/usr/bin/htpasswd
設(shè)置用戶認(rèn)證密碼的二進(jìn)制文件
完整PDF文檔可以到主機(jī)寶貝資源站下載:
具體下載目錄在 /2018年資料/5月/8日/CentOS6下使用Apache部署HTTP服務(wù)/
網(wǎng)站欄目:CentOS6下使用Apache部署HTTP服務(wù)
文章起源:http://www.dlmjj.cn/article/dhesspc.html


咨詢
建站咨詢
