日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
CentOS6下使用Apache部署HTTP服務(wù)

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)需要寫到、、 或者.htaccess文件中

還可以實(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)特定文件的訪問控制,這里借助的是 ... ... 指令,區(qū)別是前者針對(duì)指定的文件進(jìn)行設(shè)置,后者針對(duì)符合匹配條件的文件進(jìn)行設(shè)置,而且后者支持正則表達(dá)式。

[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

    # 以boot開頭的文件
    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
    # 124.1和138.254是同一主機(jī)上的兩個(gè)IP
    DocumentRoot/var/www/html
        # 因?yàn)?var/www/html目錄下添加默認(rèn)的首頁,所有設(shè)置了Options Indexes指令。
        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