第十周《Centos7系統(tǒng)下實(shí)現(xiàn)httpd....》

一够颠、Centos7系統(tǒng)下實(shí)現(xiàn)httpd-2.2的安裝压语,并分別實(shí)現(xiàn)prefork、worker忍啤、event等幾種工作方式

#準(zhǔn)備安裝環(huán)境
[root@wujunjie ~]# yum groupinstall "Development Tools" "ServerPlatform Development" -y
#下載并解壓安裝包
[root@wujunjie apache]# tar -xf httpd-2.2.32.tar.gz
[root@wujunjie apache]# ls
httpd-2.2.32  httpd-2.2.32.tar.gz
#編譯安裝httpd_2.2.32
[root@wujunjie httpd-2.2.32]# ./configure -prefix=/usr/local/httpd -with-mpm=prefork
[root@wujunjie httpd-2.2.32]# make
[root@wujunjie httpd-2.2.32]# make install
#設(shè)定環(huán)境變量
[root@wujunjie conf]# PATH="$PATH:/usr/local/httpd/bin"
[root@wujunjie conf]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/httpd/bin
[root@wujunjie conf]# vim /etc/profile.d/httpd.sh 
export PATH="$PATH:/usr/local/httpd/bin"
[root@wujunjie conf]# source /etc/profile.d/httpd.sh    #把httpd的命令添加到系統(tǒng)環(huán)境中
#調(diào)整權(quán)限
[root@wujunjie conf]# useradd -M -s /sbin/nologin httpd
[root@wujunjie conf]# chown -R httpd:httpd /usr/local/httpd/
#編輯unit文件使用systemctl 管理啟動(dòng)httpd
[root@wujunjie conf]# vim /usr/lib/systemd/system/httpd.service
[Unit]
Description=The httpd service
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/httpd/bin/apachectl start
ExecStop=/usr/local/httpd/bin/apachectl stop
ExecRestart=/usr/local/httpd/bin/apachectl restart
PrivateTmp=true
[Install]
WantedBy=multi-user.target
#啟動(dòng)服務(wù)
[root@wujunjie conf]# systemctl daemon-reload 
[root@wujunjie conf]# systemctl start httpd.service
[root@wujunjie conf]# ps aux |grep httpd
root      55254  0.0  0.1  49364  1964 ?        Ss   16:51   0:00 /usr/local/httpd/bin/httpd -k start
daemon    55255  0.0  0.2  51448  2040 ?        S    16:51   0:00 /usr/local/httpd/bin/httpd -k start
daemon    55256  0.0  0.1  51448  1344 ?        S    16:51   0:00 /usr/local/httpd/bin/httpd -k start
daemon    55257  0.0  0.1  51448  1344 ?        S    16:51   0:00 /usr/local/httpd/bin/httpd -k start
daemon    55258  0.0  0.1  51448  1344 ?        S    16:51   0:00 /usr/local/httpd/bin/httpd -k start
daemon    55259  0.0  0.1  51448  1344 ?        S    16:51   0:00 /usr/local/httpd/bin/httpd -k start
daemon    55285  0.0  0.1  51448  1344 ?        S    16:52   0:00 /usr/local/httpd/bin/httpd -k start
root      55308  0.0  0.0 112648   956 pts/2    R+   16:53   0:00 grep --color=auto httpd
[root@wujunjie conf]# httpd -M|grep mpm
Syntax OK
 mpm_prefork_module (static)
  • 1加勤、prefork
    prefork是一個(gè)兩級(jí)進(jìn)程模型,非線程的模式同波,其實(shí)通過由父進(jìn)程管理創(chuàng)建子進(jìn)程鳄梅,子進(jìn)程響應(yīng)的相應(yīng)的請(qǐng)求的方式來運(yùn)行的。以prefork模式運(yùn)行的httpd未檩,在啟動(dòng)之際就預(yù)派生fork了一些子進(jìn)程戴尸,然后等待請(qǐng)求。每個(gè)子進(jìn)程只有一個(gè)線程冤狡,在一個(gè)時(shí)間點(diǎn)內(nèi)只能處理一個(gè)請(qǐng)求孙蒙。
    優(yōu)點(diǎn):成熟、穩(wěn)定悲雳、兼容所有新老模塊挎峦。進(jìn)程之間完全獨(dú)立,無須擔(dān)心線程安全的問題合瓢。
    缺點(diǎn):一個(gè)進(jìn)程相對(duì)會(huì)占用更多的系統(tǒng)資源坦胶,消耗更多的內(nèi)存。不適合處理高并發(fā)請(qǐng)求,因其會(huì)把請(qǐng)求放進(jìn)隊(duì)列中顿苇,一直等到有可用進(jìn)程才會(huì)處理相應(yīng)的請(qǐng)求峭咒。
  • 2、worker
    worker是一個(gè)三級(jí)結(jié)構(gòu)岖圈、多進(jìn)程多線程的模式讹语,其在啟動(dòng)時(shí)也預(yù)先fork了幾個(gè)子進(jìn)程,每個(gè)子進(jìn)程能夠生產(chǎn)若干個(gè)服務(wù)線程和若干個(gè)監(jiān)聽線程蜂科,每個(gè)服務(wù)線程處理一個(gè)請(qǐng)求顽决,監(jiān)聽線程負(fù)責(zé)接入請(qǐng)求并將其傳遞給服務(wù)線程處理和應(yīng)答。線程比起進(jìn)程會(huì)更輕量导匣,因?yàn)榫€程通常會(huì)共享父進(jìn)程的內(nèi)存空間才菠,因此內(nèi)存的占用會(huì)減少些,在高并發(fā)的場(chǎng)景下表現(xiàn)比prefork模式好贡定。
    優(yōu)點(diǎn):占用內(nèi)存少赋访,高并發(fā)性能更優(yōu)秀。
    缺點(diǎn):當(dāng)一個(gè)線程出現(xiàn)問題的時(shí)候會(huì)導(dǎo)致同一進(jìn)程下的線程也會(huì)出現(xiàn)問題缓待。在keep-alive長(zhǎng)連接的方式下蚓耽,某個(gè)線程會(huì)被一直占用,即使中間沒有請(qǐng)求旋炒,也需要等待到超時(shí)才會(huì)被釋放步悠。
  • 3、event
    event模式是最新的運(yùn)行模式瘫镇,在httpd-2.4中已經(jīng)是穩(wěn)定可用的模式鼎兽。其運(yùn)行原理與worker類似,區(qū)別在于铣除,event模式解決了在keep-alive模式下谚咬,線程被長(zhǎng)期占用直到超時(shí),從而導(dǎo)致資源浪費(fèi)的問題尚粘。
    在event模塊中择卦,有一個(gè)專門的線程來管理這些keep-alive類型的線程,當(dāng)接收到真實(shí)的請(qǐng)求時(shí)背苦,會(huì)將請(qǐng)求傳遞給服務(wù)線程互捌,執(zhí)行完畢后,會(huì)將對(duì)應(yīng)的服務(wù)線程釋放行剂,這樣就能實(shí)現(xiàn)線程的異步非阻塞。
在編譯安裝的時(shí)候?qū)?yīng)做模式變更即可,默認(rèn)為prefork模式
./configure -prefix=/usr/local/httpd -with-mpm=worker
./configure -prefix=/usr/local/httpd -with-mpm=event

二钳降、簡(jiǎn)述request報(bào)文請(qǐng)求方法和狀態(tài)響應(yīng)碼

http事務(wù)就是http協(xié)議的一次請(qǐng)求和響應(yīng)的過程厚宰;http請(qǐng)求是由請(qǐng)求者發(fā)出的request報(bào)文定義的,響應(yīng)是由response報(bào)文定義的,而請(qǐng)求報(bào)文和響應(yīng)報(bào)文都有固定的格式铲觉;
報(bào)文語法格式:

request報(bào)文
  <method> <request-URL> <version>
  <headers>

  <entity-body>

response報(bào)文
  <version> <status> <reason-phrase>
  <headers>

  <entity-body>
展開說明:
method: 請(qǐng)求方法(標(biāo)明客戶端希望服務(wù)器對(duì)資源執(zhí)行的動(dòng)作)

如下為常用method的解釋:

  • 請(qǐng)求方法 解釋
    GET:從服務(wù)器獲取一個(gè)資源
    HEAD:只從服務(wù)器獲取文檔的響應(yīng)首部
    POST:向服務(wù)器發(fā)送要處理的數(shù)據(jù)
    PUT:將請(qǐng)求的主體部分存儲(chǔ)在服務(wù)器上
    DELETE:請(qǐng)求刪除服務(wù)器上指定的文檔
    TRACE:追蹤請(qǐng)求到達(dá)服務(wù)器中間經(jīng)過的代理服務(wù)器
    OPTIONS:請(qǐng)求服務(wù)器返回對(duì)指定資源支持使用的請(qǐng)求方法
version:HTTPD的版本號(hào)

HTTP/<major>.<minor>,由主版本和次版本號(hào)組成

status(狀態(tài)碼):

1xx:100-101, (額外)信息提示類的狀態(tài)碼澈蝙;
2xx:200-206, 成功類的狀態(tài)碼;
3xx:300-305, 重定向類的狀態(tài)碼撵幽;沒有把請(qǐng)求的頁面響應(yīng)給客戶端灯荧,而是重定向到其它地方,或是無需獲取此資源盐杂;
4xx:400-415, 錯(cuò)誤類信息逗载,客戶端的錯(cuò)誤類的狀態(tài)碼;例如請(qǐng)求不存在的資源链烈;
5xx:500-505, 錯(cuò)誤類信息厉斟,服務(wù)器端錯(cuò)誤類的狀態(tài)碼;例如服務(wù)器內(nèi)部的問題强衡,因?yàn)橘Y源有語法錯(cuò)誤運(yùn)行部成功擦秽,無法響應(yīng),不是資源不存在漩勤;

  • 常用的狀態(tài)碼:
狀態(tài)碼 解釋
200 成功,請(qǐng)求的所有數(shù)據(jù)通過響應(yīng)報(bào)文的entity-body部分發(fā)送;ok
301 URL指向的資源已被刪除,但在響應(yīng)報(bào)文中通過首部Location指名了資源現(xiàn)在所處的新位置;Moved Permanently
302 與301相似,但在響應(yīng)報(bào)文中通過Location指名資源現(xiàn)在的臨時(shí)新位置;Found
304 客戶端發(fā)出條件式請(qǐng)求,但是服務(wù)器上的資源沒有發(fā)生改變,則通過響應(yīng)碼通知客戶端; Not Modified
401 需要輸入帳號(hào)和密碼認(rèn)證才能訪問資源; Unauthorized
403 請(qǐng)求被禁止; Forbidden
404 服務(wù)器無法找到客戶端請(qǐng)求的資源; Not Found
500 服務(wù)器內(nèi)部錯(cuò)誤; Internal Server Error
502 代理服務(wù)器從后端服務(wù)器收到一條偽響應(yīng); Bad Gateway
headers:首部(每個(gè)請(qǐng)求或響應(yīng)報(bào)文可包含任意個(gè)首部感挥;每個(gè)首部都有首部名稱,后面跟一個(gè)冒號(hào)越败,而后跟上一個(gè)可選空格触幼,接著是一個(gè)值)

首部的分類:通用首部,請(qǐng)求首部,響應(yīng)首部,實(shí)體首部,擴(kuò)展首部等等,
格式為:Name: Value,常見的首部格式如下:
1.通用首部:
Date: 報(bào)文的創(chuàng)建時(shí)間
Connection:連接狀態(tài),如keep-alive, close
Via:顯示報(bào)文經(jīng)過的中間節(jié)點(diǎn)
Cache-Control:控制緩存
Pragma: no-cache.相當(dāng)于Cache-Control: no-cache

2.請(qǐng)求首部:
Accept:通過服務(wù)器自己可接受的媒體類型眉尸;
Accept-Charset:瀏覽器指明自己接收的字符集
Accept-Encoding:接受編碼格式域蜗,如gzip
Accept-Language:接受的語言
Client-IP: 客戶端ip地址
Host: 請(qǐng)求的服務(wù)器名稱和端口號(hào)
Referer:包含當(dāng)前正在請(qǐng)求的資源的上一級(jí)資源;
User-Agent:客戶端代理

  • 條件式請(qǐng)求首部:
    Expect:服務(wù)器指明該實(shí)體什么時(shí)候過期.
    If-Modified-Since:自從指定的時(shí)間之后噪猾,請(qǐng)求的資源是否發(fā)生過修改
    If-Unmodified-Since:自從指定的時(shí)間之后霉祸,請(qǐng)求的資源是否沒有修改
    If-None-Match:本地緩存中存儲(chǔ)的文檔的ETag標(biāo)簽是否與服務(wù)器文檔的
    If-Match:Etag沒改變,才執(zhí)行請(qǐng)求

  • 安全請(qǐng)求首部:
    Authorization:向服務(wù)器發(fā)送認(rèn)證信息,如賬號(hào)和密碼
    Cookie: 客戶端向服務(wù)器發(fā)送cookie

  • 代理請(qǐng)求首部:
    Proxy-Authorization: 向代理服務(wù)器認(rèn)證
    3.響應(yīng)首部:

  • 信息性首部:
    Age:響應(yīng)持續(xù)時(shí)長(zhǎng)袱蜡,即資源的有效期丝蹭;
    Server:服務(wù)器程序軟件名稱和版本;

  • 協(xié)商首部:某資源有多種表示方法時(shí)使用
    Accept-Ranges:服務(wù)器可接受的請(qǐng)求范圍類型坪蚁;
    Vary:服務(wù)器查看的其它首部列表奔穿;值會(huì)發(fā)生變化時(shí)就放在此首部;

  • 安全響應(yīng)首部:
    Set-Cookie:向客戶端設(shè)置cookie敏晤;用來標(biāo)識(shí)客戶端身份贱田;
    Set-Cookie2: 向客戶端設(shè)置cookie版本2的信息;
    WWW-Authenticate:來自服務(wù)器的對(duì)客戶端的質(zhì)詢認(rèn)證表單嘴脾;當(dāng)客戶端請(qǐng)求資源時(shí)男摧,資源要求認(rèn)證蔬墩;
    4.實(shí)體首部:提供實(shí)體內(nèi)容的大量信息;

  • 跟內(nèi)容格式相關(guān):
    Allow: 列出對(duì)此實(shí)體可使用的請(qǐng)求方法耗拓;
    Location:告訴客戶端真正的實(shí)體位于何處拇颅,在重定向時(shí)使用,響應(yīng)碼為301或302乔询;
    Content-Encoding: 內(nèi)容的編碼格式樟插;
    Content-Language: 內(nèi)容使用的語言;
    Content-Length: 主體的長(zhǎng)度竿刁;
    Content-Location: 實(shí)體真正所處位置黄锤;
    Content-Type:主體的對(duì)象類型;如多媒體的類型等们妥;
    Content-Range:在整個(gè)資源中此實(shí)體表示的字節(jié)范圍猜扮;

  • 跟緩存相關(guān):
    ETag:資源實(shí)體的擴(kuò)展標(biāo)簽;基于標(biāo)簽做請(qǐng)求時(shí)使用监婶;
    Expires:實(shí)體內(nèi)容的過期時(shí)間旅赢;
    Last-Modified:最后一次修改的時(shí)間;此時(shí)間只是推算出來的惑惶,可能不準(zhǔn)確煮盼;

三、詳細(xì)描述httpd虛擬主機(jī)带污、站點(diǎn)訪問控制僵控、基于用戶的訪問控制、持久鏈接等應(yīng)用配置實(shí)例

虛擬主機(jī)

有三種實(shí)現(xiàn)方案:
基于ip:為每個(gè)虛擬主機(jī)準(zhǔn)備至少一個(gè)ip地址鱼冀;
基于port:為每個(gè)虛擬主機(jī)使用至少一個(gè)獨(dú)立的port报破;
基于FQDN主機(jī)名:為每個(gè)虛擬主機(jī)使用至少一個(gè)FQDN;

  • 注意點(diǎn):
    1.一般虛擬主機(jī)不要與中心主機(jī)混用;要使用虛擬主機(jī),得先禁用"main"主機(jī),禁用方法: 注釋中心主機(jī)的DocumentRoot指令即可.
    2.配置VirtualHost千绪,在httpd2.2中充易,NameVirtualHost這一項(xiàng)需啟用,2.2以上版本不需要.
  • 基于IP地址
[root@localhost ~]#ip addr add 192.168.32.150/24 dev ens33
[root@localhost logs]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:82:eb:87 brd ff:ff:ff:ff:ff:ff
    inet 192.168.32.132/24 brd 192.168.32.255 scope global dynamic ens33
       valid_lft 650sec preferred_lft 650sec
    inet 192.168.32.150/24 scope global secondary ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::ccba:631a:dc48:5172/64 scope link 
       valid_lft forever preferred_lft forever
#創(chuàng)建2個(gè)虛擬主機(jī)的目錄
[root@localhost ~]# mkdir /var/www/html/{ilinux,iunix}
#編輯虛擬httpd站點(diǎn)主頁面
[root@localhost ~]# vim /var/www/html/ilinux/index.html
<h1>ilinux</h1>
[root@localhost ~]# vim /var/www/html/iunix/index.html
<h1>iunix</h1>
#編輯httpd虛擬主機(jī)配置文件
[root@localhost ~]# vim /etc/httpd/conf.d/virtualhost.conf
<VirtualHost 192.168.32.132:80>
        Servername www.ilinux.io
        DocumentRoot "/var/www/html/ilinux"
     <Directory "/var/www/html/ilinux">
        Options None
        AllowOverride None
        Require all granted
     </Directory>
        Customlog "logs/ilinux_access_log" combined
</VirtualHost>

<VirtualHost 192.168.32.150:80>
        Servername www.iunix.io
        DocumentRoot "/var/www/html/iunix"
     <Directory "/var/www/html/iunix">
        Options None
        AllowOverride None
        Require all granted
     </Directory>
        Customlog "logs/unix_access_log" combined
</VirtualHost>
#檢查配置文件語法
    httpd -t
Syntax OK
#重啟HTTPD服務(wù)
systemctl restart httpd.service
#測(cè)試對(duì)應(yīng)結(jié)果
[root@localhost ~]# curl http://192.168.32.132
<h1>ilinux</h1>
[root@localhost ~]# curl http://192.168.32.150
<h1>iunix</h1>
  • 基于端口號(hào)
#修改虛擬主機(jī)配置文件并監(jiān)聽8080端口
[root@localhost ~]# vim /etc/httpd/conf.d/virtualhost.conf
<VirtualHost 192.168.32.132:80>
        Servername www.ilinux.io
        DocumentRoot "/var/www/html/ilinux"
     <Directory "/var/www/html/ilinux">
        Options None
        AllowOverride None
        Require all granted
     </Directory>
        Customlog "logs/ilinux_access_log" combined
</VirtualHost>

LISTEN 8080
<VirtualHost 192.168.32.150:8080>
        Servername www.iunix.io
        DocumentRoot "/var/www/html/iunix"
     <Directory "/var/www/html/iunix">
        Options None
        AllowOverride None
        Require all granted
     </Directory>
        Customlog "logs/unix_access_log" combined
</VirtualHost>
#檢查配置文件語法
    httpd -t
Syntax OK
#重啟HTTPD服務(wù)
systemctl restart httpd.service
#測(cè)試對(duì)應(yīng)結(jié)果
[root@localhost ~]# curl http://192.168.32.132:80
<h1>ilinux</h1>
[root@localhost ~]# curl http://192.168.32.150:8080
<h1>iunix</h1>
  • 基于主機(jī)域名
#更改本地hosts文件對(duì)應(yīng)關(guān)系或自建DNS做對(duì)應(yīng)修改

[root@localhost ~]# vim /etc/hosts

192.168.32.132 www.ilinux.io

192.168.32.150 [www.iunix.io](http://www.iunix.io)

#基于上訴配置直接檢驗(yàn)

[root@localhost ~]# curl www.iunix.io:8080

<h1>iunix</h1>

[root@localhost ~]# curl www.ilinux.io

<h1>ilinux</h1>
站點(diǎn)路徑訪問控制

可基于來源地址或者基于賬號(hào)兩種訪問控制機(jī)制;定義的方式有兩種:
文件系統(tǒng)路徑:<Directory ""> ... </Directory>
URL路徑:<Location ""> ... </Location>

  • <Directory>中“基于源地址”實(shí)現(xiàn)訪問控制:
    (1) Options后跟1個(gè)或多個(gè)以空白字符分隔的“選項(xiàng)”列表荸型;
    Indexes:指明的URL路徑下不存在與定義的主頁面資源相符的資源文件時(shí)盹靴,返回索引列表給用戶;作為下載站點(diǎn)時(shí)才使用瑞妇;否則稿静,不使用此選項(xiàng);
    FollowSymLinks:允許跟蹤符號(hào)鏈接文件所指向的源文件辕狰;
    None:都禁止改备;
    All:都允許;
    Includes:允許啟用服務(wù)器包含蔓倍;
    SymLinksifOwnerMatch:比FollowSymLinks在限制上更為嚴(yán)格的機(jī)制绍妨;表示只有原文件的屬主和鏈接文件的屬主相同時(shí)润脸,才允許跟蹤柬脸;
    ExecCGI:允許執(zhí)行cgi腳本他去;
    MultiViews:允許執(zhí)行內(nèi)容協(xié)商;非常消耗資源且不太安全倒堕;
    (2) AllowOverride:與訪問控制相關(guān)的哪些指令可以放在.htaccess文件(每個(gè)目錄即網(wǎng)站目錄下都可以有一個(gè)灾测,指令放在此文件中表示當(dāng)前目錄下的配置文件都無效,所在目錄下的這個(gè)隱藏文件生效)中垦巴;
    All: 所有指令都可放在這個(gè)隱藏文件中媳搪;
    None:這個(gè)隱藏文件中什么指令都不放;或給個(gè)指定列表骤宣,文件信息、根認(rèn)證相關(guān)的信息,限制可放進(jìn)這個(gè)隱藏文件中蜻势;會(huì)使網(wǎng)站資源解析時(shí)性能影響非常大有巧;
    (3) http-2.2中基于IP地址的訪問控制是利用Allow和Deny來實(shí)現(xiàn)的;order:定義生效次序芬膝;寫在后面的表示默認(rèn)法則望门;如:
      <Directory  "/PATH/TO/FILE">
          Options Indexes FollowSymLinks
          AllowOverride None
          Order allow, deny
          Allow  from  IP | NetAddr
          Deny  from  IP | NetAddr
      </Directory>

httpd-2.4中基于Ip地址訪問的控制是利用Require實(shí)現(xiàn),如:

      <Directory  "/PATH/TO/FILE">
         AllowOverride none
         Options none
         <RequireAll>
            Require ip IP | NetAddr #允許訪問的IP或網(wǎng)段
            Require not ip IP | NetAddr #拒絕訪問的Ip或網(wǎng)段
         </RequireAll>
      </Directory>
實(shí)例:
#修改上訴虛擬主機(jī)配置文件
[root@localhost ~]# vim /etc/httpd/conf.d/virtualhost.conf
<VirtualHost 192.168.32.132:80>
 Servername www.ilinux.io
 DocumentRoot "/var/www/html/ilinux"
 <Directory "/var/www/html/ilinux">
 Options None
 AllowOverride None
 Require all granted
 </Directory>
 Customlog "logs/ilinux_access_log" combined
</VirtualHost>
LISTEN 8080
<VirtualHost 192.168.32.150:8080>
 Servername www.iunix.io
 DocumentRoot "/var/www/html/iunix"
 <Directory "/var/www/html/iunix">
 Options None
 AllowOverride None
 <RequireAll>
 require all granted
 require not ip 192.168.32.129
 </RequireAll>
 </Directory>
 Customlog "logs/unix_access_log" combined
</VirtualHost>
#重啟服務(wù)
[root@localhost ~]# systemctl restart httpd.service
##在主機(jī)192.168.32.129上檢測(cè)
[root@wujunjie6 ~]# curl http://192.168.32.132   #可以訪問
<h1>ilinux</h1>
[root@wujunjie6 ~]# curl [http://192.168.32.150:8080](http://192.168.32.150:8080)    #報(bào)錯(cuò)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"><html><head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
 <title>Apache HTTP Server Test Page powered by CentOS</title>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
…………………………………….
基于用戶的訪問控制:

對(duì)于網(wǎng)站中的一些資源,需要只對(duì)特定的用戶開放,可以通過用戶的訪問控制來實(shí)現(xiàn).有質(zhì)詢和認(rèn)證兩種方式.
質(zhì)詢:服務(wù)器用401響應(yīng)碼拒絕客戶端請(qǐng)求锰霜,并說明要求客戶端提供賬號(hào)和密碼
認(rèn)證:客戶端用戶填入賬號(hào)和密碼后再次發(fā)送請(qǐng)求報(bào)文,認(rèn)證通過時(shí)筹误,則服務(wù)器發(fā)送響應(yīng)的資源.有basic基本認(rèn)證和digest摘要認(rèn)證兩種.這里以basic認(rèn)證做實(shí)驗(yàn).
basic認(rèn)證的配置格式如下:

<Directory "/somepath/to/file">  # 需要訪問控制的文件路徑
    Options None
    AllowOverride None
    AuthType Basic   # 認(rèn)證方式
    AuthName "String“   #認(rèn)證提示信息
    AuthUserFile  "/PATH/TO/HTTPD_USER_PASSWD_FILE"   #認(rèn)證用戶的文件路徑
    Require  user  username1  username2 ...   #允許訪問的用戶
</Directory>
#  Require  valid-user  表示允許所有AuthUserFile 文件中所以的賬號(hào)
#  AuthGroupFile "/PATH/TO/HTTPD_GROUP_FILE"  基于用戶組做訪問控制
#  Require  group  grpname1  grpname2 ... 同上
登陸使用的賬號(hào)為虛擬賬號(hào)而非系統(tǒng)的賬號(hào),而且httpd是明文傳輸?shù)?所以使用htpasswd命令來創(chuàng)建賬號(hào)文件格式如下:
htpasswd  [options]   /PATH/TO/HTTPD_PASSWD_FILE  username 
        -c:自動(dòng)創(chuàng)建此處指定的文件,因此癣缅,僅應(yīng)該在此文件不存在時(shí)使用
        -m:md5格式加密
        -s: sha格式加密
        -D:刪除指定用戶
實(shí)例
#創(chuàng)建密碼賬戶和允許訪問的用戶
[root@localhost ~]# htpasswd -c /tmp/text.users tom
[root@localhost ~]# htpasswd -m /tmp/text.users wuwuwu
[root@localhost tmp]# htpasswd -m /tmp/text.users jjj
#把存放密碼的文件移動(dòng)到httpd目錄下,且保存為隱藏文件
[root@localhost ~]# mv /tmp/text.users /etc/httpd/conf.d/.htpasswd
#創(chuàng)建站點(diǎn)主頁面
[root@localhost ~]# mkdir /var/www/html/text
[root@localhost ~]# echo "1212121" > /var/www/html/text/index.html
#創(chuàng)建模塊化文件并且做對(duì)應(yīng)配置
[root@www ~]# vim /etc/httpd/conf.d/text.conf
<Directory "var/www/html/text">
        Options None
        AllowOverride None
        AuthType Basic
        AuthName "please enter the user"
        AuthUserFile "/etc/httpd/conf.d/.htpasswd"
        Require user tom wuwuwu jjj
</Directory>
#測(cè)試語法錯(cuò)誤并重啟
[root@localhost ~]# httpd -t
Syntax OK
[root@localhost ~]# systemctl restart httpd.service
驗(yàn)證
持久連接相關(guān):

Persistent Connection:tcp連接建立后厨剪,每個(gè)資源獲取完成后不全斷開連接,而是繼續(xù)等待其他資源請(qǐng)求的進(jìn)行友存;但是總歸要斷開祷膳,如何斷開?可以通過對(duì)連接數(shù)量和時(shí)間限制來控制爬立;比如:限制100個(gè)連接钾唬,超過100個(gè)后會(huì)斷開最先的連接;限制連接60秒后沒有進(jìn)行任何操作則斷開侠驯;

  • 副作用:對(duì)并發(fā)訪問量較大的服務(wù)器抡秆,長(zhǎng)連接機(jī)制會(huì)使得后續(xù)某些請(qǐng)求無法得到正常響應(yīng);
  • 折衷的改進(jìn)辦法:使用較短的持久連接時(shí)長(zhǎng)吟策,以及較少的請(qǐng)求數(shù)量儒士;
  • 持久連接的相關(guān)參數(shù):
KeepAlive Off|On                           #關(guān)閉或打開持久連接
MaxKeepAliveRequserts 100         #最大持久連接請(qǐng)求數(shù)量
KeepAliveTimeout 15                    #連接時(shí)長(zhǎng),單位秒檩坚;httpd-2.4支持毫秒
  • 測(cè)試:
telnet WEB_SERVER_IP PORT
GET  /URL  HTTP/1.1
Host:WEB_SERVER_IP
實(shí)例:
[root@wujunjie6 ~]# vim /etc/httpd/conf.d/keepalive.conf
keepalive  On
KeepAliveTimeout  15
MaxKeepAliveRequests  100
[root@wujunjie6 ~]# netstat -tnl|grep 23     #監(jiān)聽23端口
tcp        0      0 :::23                       :::*                        LISTEN    
[root@wujunjie6 ~]# telnet 192.168.32.129 80
Trying 192.168.32.129...
Connected to 192.168.32.129.
Escape character is '^]'.
GET /index.html HTTP/1.1
Host:192.168.32.129

HTTP/1.1 200 OK
Date: Thu, 18 Oct 2018 08:32:38 GMT
Server: Apache/2.2.15 (CentOS)
Last-Modified: Thu, 18 Oct 2018 07:21:11 GMT
ETag: "2009e1-8-5787ba1a3e6d8"
Accept-Ranges: bytes
Content-Length: 8
Content-Type: text/html; charset=UTF-8

2112312

Connection closed by foreign host.   #這里不會(huì)立刻斷開着撩,會(huì)等到最大連接數(shù)或連接時(shí)長(zhǎng)到達(dá)才會(huì)斷開
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末诅福,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子拖叙,更是在濱河造成了極大的恐慌氓润,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,386評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件薯鳍,死亡現(xiàn)場(chǎng)離奇詭異咖气,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)挖滤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門崩溪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人斩松,你說我怎么就攤上這事伶唯。” “怎么了惧盹?”我有些...
    開封第一講書人閱讀 164,704評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵乳幸,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我岭参,道長(zhǎng)反惕,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,702評(píng)論 1 294
  • 正文 為了忘掉前任演侯,我火速辦了婚禮姿染,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘秒际。我一直安慰自己悬赏,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評(píng)論 6 392
  • 文/花漫 我一把揭開白布娄徊。 她就那樣靜靜地躺著闽颇,像睡著了一般。 火紅的嫁衣襯著肌膚如雪寄锐。 梳的紋絲不亂的頭發(fā)上兵多,一...
    開封第一講書人閱讀 51,573評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音橄仆,去河邊找鬼剩膘。 笑死,一個(gè)胖子當(dāng)著我的面吹牛盆顾,可吹牛的內(nèi)容都是我干的怠褐。 我是一名探鬼主播,決...
    沈念sama閱讀 40,314評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼您宪,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼奈懒!你這毒婦竟也來了奠涌?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,230評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤磷杏,失蹤者是張志新(化名)和其女友劉穎溜畅,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體茴丰,經(jīng)...
    沈念sama閱讀 45,680評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡达皿,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了贿肩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,991評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡龄寞,死狀恐怖汰规,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情物邑,我是刑警寧澤溜哮,帶...
    沈念sama閱讀 35,706評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站色解,受9級(jí)特大地震影響茂嗓,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜科阎,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評(píng)論 3 330
  • 文/蒙蒙 一述吸、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧锣笨,春花似錦蝌矛、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至椭岩,卻和暖如春茅逮,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背判哥。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工献雅, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人姨伟。 一個(gè)月前我還...
    沈念sama閱讀 48,158評(píng)論 3 370
  • 正文 我出身青樓惩琉,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親夺荒。 傳聞我的和親對(duì)象是個(gè)殘疾皇子瞒渠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容