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

創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比正寧網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式正寧網(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ū)動模塊。構(gòu)成了core+modules模型;
2.支持動態(tài)加載和卸載模塊
就是類似熱拔插一樣的功能,可以實(shí)現(xiàn)不重啟服務(wù)的情況加載和卸載模塊并使其生效。
3.支持多路處理模塊MPM
Apache可以有三種(處理)工作模式,分別為:
prefork---多進(jìn)程I/O模型,一個進(jìn)程處理一個請求,是Apache的默認(rèn)工作模式
該工作模式下存在一個主進(jìn)程和多個子進(jìn)程,那些個子進(jìn)程由主進(jìn)程生成和回收。主進(jìn)程負(fù)責(zé)生成套接字、管理子進(jìn)程,但是不負(fù)責(zé)處理請求,主進(jìn)程由root身份執(zhí)行;子進(jìn)程才是真正負(fù)責(zé)處理請求的角色,一開始會有多個空閑子進(jìn)程等待處理請求,一個子進(jìn)程處理一個請求,子進(jìn)程由apache用戶執(zhí)行。
worker----復(fù)用多進(jìn)程I/O模型
該工作模式下,存在一個主進(jìn)程,同樣地主進(jìn)程負(fù)責(zé)管理子進(jìn)程,并不處理請求,主進(jìn)程生成多個子進(jìn)程,同時(shí)每個子進(jìn)程生成多個線程,一個線程處理一個請求,這樣假設(shè)子進(jìn)程數(shù)為M,每個子進(jìn)程的線程數(shù)為N,則此工作模式可以并發(fā)處理M*N個請求。該模式下占用內(nèi)存小,多用于大型網(wǎng)站。
event-----事件驅(qū)動模型
event和worker工作類似,都是并發(fā)處理M*N個請求。但是event做出的改進(jìn)是,每個子進(jìn)程中對線程劃分的更加詳細(xì),有管理線程和服務(wù)線程兩種,為什么要這樣設(shè)計(jì)呢,我們知道HTTP1.1版本默認(rèn)為持久連接keepalive,如果建立連接卻沒有發(fā)送請求,就會一直占用此連接的帶寬直到規(guī)定時(shí)間才會釋放,因此加入了管理進(jìn)程,專門監(jiān)視keepalive類型的服務(wù)線程,當(dāng)發(fā)生真正的請求的時(shí)候,管理線程把請求轉(zhuǎn)交給服務(wù)線程處理,處理完畢后管理線程會釋放服務(wù)線程的資源。增加了帶寬的利用率。
4.虛擬主機(jī)
有些網(wǎng)站的訪問量低的可憐,這么低的訪問量如果專門用一臺服務(wù)器來搭建的話,實(shí)在是劃不來,因此就想到了在一臺服務(wù)器上搭建多個網(wǎng)站,多個網(wǎng)站共用一臺服務(wù)器降低資源消耗,這樣的功能就叫做虛擬主機(jī)功能。一個服務(wù)器搭建多個網(wǎng)站,每個網(wǎng)站對應(yīng)不同的域名,外部客戶端想要訪問的時(shí)候,DNS會將這些不同網(wǎng)站的域名解析到同一臺服務(wù)器,服務(wù)器根據(jù)HTTP請求的首部行中的域名信息,將請求轉(zhuǎn)至對應(yīng)的目錄資源。
小tips:虛擬主機(jī)和虛擬機(jī)的區(qū)別->虛擬主機(jī)是一臺主機(jī)上邊部署多個網(wǎng)站的功能,支撐這么多網(wǎng)站的主機(jī)運(yùn)行的是同一個操作系統(tǒng);而虛擬機(jī)是一個系統(tǒng)通過VMware、LVM等技術(shù)虛擬出來的多個主機(jī),這些虛擬的主機(jī)可以運(yùn)行不同的操作系統(tǒng)。
5.CGI通用網(wǎng)關(guān)接口
支持動態(tài)網(wǎng)頁。這樣說會很晦澀,先來說什么是網(wǎng)關(guān),網(wǎng)關(guān)就是兩個網(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)交給另一個網(wǎng)段。同理再來看CGI,web服務(wù)器只能發(fā)送靜態(tài)頁面,當(dāng)服務(wù)器收到例如index.php的文件請求時(shí),服務(wù)器總不能把index.php發(fā)送出去吧,因?yàn)檫@是一個動態(tài)文件啊,此時(shí)CGI會把index.php處理成一種規(guī)定的數(shù)據(jù)格式,然后交給php解釋器執(zhí)行,隨后再把執(zhí)行后的數(shù)據(jù)經(jīng)過CGI處理,最后把結(jié)果由服務(wù)端發(fā)送給客戶端,這里的CGI就是起到了靜態(tài)請求和動態(tài)請求的轉(zhuǎn)換接口。
6.支持反向代理
7.可以實(shí)現(xiàn)負(fù)載均衡
8.支持路徑別名
為了不讓用戶知道服務(wù)端資源的真正目錄,可以對目錄做一個別名,用戶只需要知道這個別名即可,別名會自動跳轉(zhuǎn)到真正的目錄。
9.可以實(shí)現(xiàn)安全認(rèn)證機(jī)制
二、開啟Apache
CentOS中默認(rèn)都會提供Apache的rpm包,這樣我們安裝Apache就會很簡單了,直接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)的文件,安裝成功之后會在/etc/httpd/目錄下多了幾個子目錄,如
下圖:
我們會發(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),顯示了錯誤信息,
如果嘗試停止httpd,雖然會出現(xiàn)顯示服務(wù)停止成功OK的標(biāo)志,但是httpd進(jìn)程還存在,說明stop失敗,
現(xiàn)在手動恢復(fù)該進(jìn)程文件,一切又恢復(fù)正常。說明start、stop、status的httpd服務(wù)命令都是依靠這個httpd.pid進(jìn)程文件來對指定的進(jìn)程生效,如果把這個進(jìn)程文件刪除,將無法識別httpd的進(jìn)程,也就無法對httpd進(jìn)程進(jìn)行操作。由此我們也可以認(rèn)識到判斷一個服務(wù)是否在運(yùn)行最準(zhǔn)確的方法是查看相應(yīng)端口監(jiān)聽狀態(tài)。
小tips:httpd.pid進(jìn)程文件是httpd主進(jìn)程開啟之后將PID寫入的,主進(jìn)程終止之后該進(jìn)程文件會刪除。如果在主進(jìn)程開啟之前隨意手動寫了一個PID至進(jìn)程文件中,則會在主進(jìn)程開啟之后覆蓋手動寫的PID。
總結(jié):另外Apache本身也會提供開啟http服務(wù)的程序,該程序存放位置為/usr/sbin/apachectl,該文件為shell腳本,我們也可以通過該腳本達(dá)成和/etc/init.d/httpd同樣的效果。
三、變換Apache的處理模式(MPM)
當(dāng)前的Apache僅僅支持prefork模式和worker模式,event模式目前還在測試階段,因此我們主要關(guān)心前兩種模式。那么怎么查看Apache的當(dāng)前的處理模式呢,我們可以利用開啟服務(wù)的命令來判斷當(dāng)前的處理模式。首先確保http服務(wù)屬于開啟狀態(tài),然后利用pstree和ps命令查看,
我們可以確定Apache默認(rèn)在不修改的情況下會工作在prefork模式下,至于變換Apache的處理模式則要用到/etc/sysconfig/httpd文件,只需要修改文件中HTTPD參數(shù)然后重啟http服務(wù),就可以變換工作模式了。
更改之后在利用pstree和ps命令查看不同。
四、配置文件中全局環(huán)境設(shè)置
Apache中提供了兩個配置文件,分別為/etc/httpd/conf/httpd.conf(主要),/etc/httpd/conf.d/*.conf(額外,用戶可以在此修改配置文件),其中主要的配置文件多用來設(shè)定全局指令,不建議普通用戶在主配置文件中修改;對于額外的配置文件,可以把對特定功能的指令配置設(shè)定在此目錄下,并且文件必須以.conf結(jié)尾。
主配置文件中的內(nèi)容分為三大部分,分別為全局環(huán)境配置、主服務(wù)的配置、虛擬主機(jī)的配置,對應(yīng)于section{1..3},其中全局環(huán)境(section1)配置中各個指令的含義如下:
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
該指令不能注釋(#)不寫,如果該指令缺省不寫,啟動服務(wù)會出現(xiàn)異常。
ServerRoot 定義配置文件的根目錄,一般為/etc/httpd/
Timeout 連接狀態(tài)能夠持續(xù)的時(shí)間
AddDefaultCharset 定義httpd傳輸數(shù)據(jù)的編碼格式,一般為UTF-8
編碼格式不對應(yīng)會在瀏覽器上顯示亂碼,只能修改瀏覽器的編碼格式
KeepAlive 是否開啟持久連接的指令,默認(rèn)On開啟狀態(tài),Off為關(guān)閉狀態(tài)
每次從服務(wù)器下載文件的時(shí)候都需要建立一次TCP連接,如果為Off,下載完畢后會斷開此次TCP連接;如果為On,下載完畢后會繼續(xù)保持此次TCP連接。
MaxKeepAliveRequests 一次TCP連接能夠發(fā)送的最大請求數(shù),例如值為3時(shí),可以利用GET發(fā)送4次請求,第1次不算哦??!
該參數(shù)只有在KeepAlive設(shè)置為On的時(shí)候才會生效,設(shè)置為0表示沒有限制
KeepAliveTimeout 在本次TCP連接中等待下一個請求的時(shí)間,超過會斷開此次TCP連接
該參數(shù)同樣只有在KeepAlive設(shè)置為On的時(shí)候才會生效
可以利用telnet測試keepalive:
telnet ip port # 如果沒有修改的話,則是80端口
GET /xxx1 http/1.1 # xxx1為/var/www/html下的一個文本文件
host:xxxx # xxxx為客戶端的IP地址
上述命令完畢之后需要按shift+enter鍵才能返回結(jié)果
MPM的參數(shù)配置,具體的各個參數(shù)含義如下:
StartServers 啟動httpd服務(wù)會開啟幾個進(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請求的最大進(jìn)程數(shù)
MaxClients 可以同時(shí)連接到httpd服務(wù)的最大連接數(shù)量,和ServerLimit的數(shù)值一樣,默認(rèn)最大值為256
MaxRequestsPerChild 每個子進(jìn)程處理http請求的最大數(shù)量,超過該值會釋放子進(jìn)程,0表示無限制
下圖所示為prefork處理模式下的進(jìn)程的狀態(tài),可以讓多個終端利用telnet命令來連接服務(wù)端并保持連接,測試進(jìn)程數(shù)量的變化:
修改/etc/sysconfig/httpd文件,再來看看worker模式下的進(jìn)程/線程狀態(tài)
但是4個子進(jìn)程*25個線程=100個線程,這樣就會超過75個線程的限制,因此會出現(xiàn)下圖所示的情況,剛開啟httpd就有一個進(jìn)程被殺死。不過手速要快,不然看不到這種情況。
LoadModule xxx.so 模塊的路徑 表示啟動httpd服務(wù)時(shí)加載的模塊
httpd -l # 查看加載的靜態(tài)模塊
httpd -M # 查看加載的靜態(tài)和動態(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請求的用戶和用戶組都為Apache
小tips:可以利用httpd -t 或者service httpd configtest 來檢測配置文件的語法錯誤,檢測通過則會顯示Syntax OK的標(biāo)志,但是只能檢測文件的語法錯誤,并不能保證服務(wù)能夠正常的運(yùn)行。
五、多樣化設(shè)置目錄的顯示內(nèi)容
ServerName 指定服務(wù)器的域名
剛安裝Apache啟動的時(shí)候,會在start部分停留好久,之后會報(bào)兩個錯誤,但是不影響服務(wù)的正產(chǎn)啟動,這種情況就是ServerName沒有指定,導(dǎo)致DNS解釋失敗,因此我們需要在ServerName指令后添加主機(jī)名:port,然后就不會有上訴的兩個錯誤
ServerAdmin 管理員的郵箱服務(wù)器,錯誤信息都會發(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 定義用戶訪問一個網(wǎng)站的首頁,默認(rèn)為index.html
什么是首頁,就是用戶在網(wǎng)址列只輸入到目錄,因?yàn)闆]有指定要訪問的文件,因此會顯示DirectoryIndex設(shè)置的文件,文件顯示的內(nèi)容就是首頁。
可以設(shè)置多個首頁,默認(rèn)顯示第一個文件
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í)候,會去顯示該目錄下的index.html/index.html.var文件(同時(shí)存在按照先后順序),即DirectoryIndex指令的值會遞歸到每個目錄。
5.2 設(shè)置指定目錄的首頁
上面設(shè)定首頁的方法是對全部目錄生效的,那如果只針對特定目錄設(shè)置不同的首頁內(nèi)容,該怎么做呢?配置文件中為我們提供了 ... 的指令,他表示的含義是對目錄進(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)行的動作的參數(shù),選項(xiàng)如下:
Indexes 如果該目錄內(nèi)沒有找到設(shè)定為首頁的文件,則將該目錄內(nèi)的所有文件的索引列出來,即該目錄下的每個文件名
FollowSymLinks 字面意思:跟蹤符號鏈接,就是可以訪問到該鏈接文件的源文件,如果該鏈接文件指向了/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)避免多個個人首頁目錄維護(hù)同時(shí)修改主配置文件
主配置文件需要root身份才可以修改,主配置文件需要重啟服務(wù)才會生效,因此加入了.htaccess文件,只需要在該文件中進(jìn)行修改用以覆蓋主配置文件的參數(shù)設(shè)定
All 允許所有
None 全部禁止,則.htaccess文件失效
AuthConfig 只允許用戶認(rèn)證可以被覆蓋
Limit Order可以被覆蓋
Indexes 允許Indexes可以被覆蓋,這里的Indexes和Options里的Indexes不是同一個意思。
Options 允許目錄可以進(jìn)行的動作
[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)同一個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)在一個交叉集的時(shí)候,后者會覆蓋前者,交叉集外的仍然生效。
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)收到訪問該別名的請求時(shí),服務(wù)器自動跳轉(zhuǎn)到真實(shí)的目錄下返回資源給客戶端,這一過程對客戶端是透明的。
Alias /xxx "實(shí)際目錄" 網(wǎng)站根目錄下的xxx目錄會自動鏈接到后邊的實(shí)際目錄
例如:Alias /icons/ "/var/www/icons/"
網(wǎng)址列輸入http://hostname/icons,會訪問到/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)證的訪問控制
每個網(wǎng)站都會有后臺管理員管理網(wǎng)站后臺的一些工作,但是網(wǎng)站后臺不是每個用戶都可以登錄,因此需要設(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)建兩個用戶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,否則會覆蓋文件中的其他用戶
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,會出現(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也可以(上個例子中的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:每個虛擬主機(jī)至少一個IP
基于Port:每個虛擬主機(jī)至少一個獨(dú)立的Port
基于域名:每個虛擬主機(jī)至少一個域名
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ī)
這種方法是基于一個ip上綁定多端口來實(shí)現(xiàn)的
[root@CentOS6 conf.d]# cat virtualhost.conf
Listen 192.168.138.254:8090 # 設(shè)置監(jiān)聽的端口號
Listen 192.168.138.254:8080
DocumentRoot/var/www/html
Options Indexes
DocumentRoot/var/www/error
Options Indexes
可以看到同一IP的不同端口,訪問的資源不同
小tips:設(shè)置好基于port的虛擬主機(jī)后,重啟httpd會失敗,錯誤信息如下
(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就可以正常啟動了。
/etc/httpd/conf.d/welcome.conf
8.3 基于域名的虛擬主機(jī)
一個IP上對應(yīng)多個域名,不同的域名對應(yīng)各自的站點(diǎn),先來配置httpd的配置文件,www.a.linux.com對應(yīng)/var/www/html目錄,www.b.linux.com對應(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ù)器,所有需要手動的將www.a.linux.com和www.b.linux.com的IP-192.168.138.254添加到hosts文件中,windows中該文件在C:\Windows\System32\drivers\etc的目錄下的hosts文件,我們修改
如下:
瀏覽器測試如下:會發(fā)現(xiàn)不同域名訪問的結(jié)果不一樣。
小tips:Apache的功能還有很多,關(guān)于更加詳細(xì)的功能實(shí)現(xiàn)的指令我們可以借助Apache提供的文檔(不是man哦),而是Apache額外提供的一個軟件包,我們需要安裝才能夠查閱,這個軟件就是httpd-manual,
yum -y install httpd-manual
安裝成功之后會在/etc/httpd/conf.d/目錄下多出一個manual.conf的文件,文件內(nèi)容如下,其實(shí)就是給我們提供了一個網(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/
錯誤信息所在目錄
/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://m.5511xx.com/article/dhesspc.html


咨詢
建站咨詢
