20170927 http服務(wù)和apache(二)

  • http-2.2常見(jiàn)配置
  • http協(xié)議
  • curl和elinks工具

一、http-2.2常見(jiàn)配置

  • httpd配置文件的組成:分為三部分
    grep "Section" /etc/httpd/conf/httpd.conf
### Section 1: Global Environment              //全局配置
### Section 2: 'Main' server configuration     //主服務(wù)器配置
### Section 3: Virtual Hosts                   //虛擬主機(jī)配置
  • 配置格式:directive value (指令 值)
    directive:不區(qū)分字符大小寫(xiě)
    value:當(dāng)為路徑時(shí),是否區(qū)分大小寫(xiě)取決于文件系統(tǒng)

(一)顯示服務(wù)器版本信息

  • 設(shè)置格式:ServerTokens Major|Minor|Min[imal]|Prod[uctOnly]|OS|Full

    • ServerTokens Prod[uctOnly]: Server: Apache
    • ServerTokens Major: Server: Apache/2
    • ServerTokens Minor: Server: Apache/2.0
    • ServerTokens Min[imal]: Server: Apache/2.0.41
    • ServerTokens OS: Server: Apache/2.0.41 (Unix)
    • ServerTokens Full (or not specified): Server: Apache/2.0.41 (Unix) PHP/4.2.2 MyMod/1.2,被注釋時(shí)默認(rèn)狀態(tài)為Full
  • 建議將ServerTokens值設(shè)為Prod

(二)修改監(jiān)聽(tīng)的IP和Port

  • 設(shè)置格式:Listen [IP:]PORT

    • 省略IP表示為0.0.0.0
    • Listen指令至少一個(gè),可重復(fù)出現(xiàn)多次
      Listen 80
      Listen 8080
    • 修改監(jiān)聽(tīng)socket,重載服務(wù)進(jìn)程方可生效
  • 注意:必須有端口號(hào)設(shè)置,否則服務(wù)啟動(dòng)失敗

  • 實(shí)驗(yàn):只允許從192.168.136.229:8080端口訪(fǎng)問(wèn)http服務(wù)

vim /etc/httpd/conf/httpd.conf
Listen 192.168.136.229:8080

httpd -t
service httpd reload
curl -I 192.168.136.229:80
curl -I 192.168.136.229:8080
curl -l 172.18.250.44:80

(三)持久連接

  • 定義:連接建立,每個(gè)資源獲取完成后不會(huì)斷開(kāi)連接,而是繼續(xù)等待其它的請(qǐng)求完成,默認(rèn)關(guān)閉持久連接

  • 開(kāi)啟持久連接需要設(shè)置斷開(kāi)條件:數(shù)量限制、時(shí)間限制

  • 設(shè)置格式:
    KeepAlive On|Off
    KeepAliveTimeout 15:時(shí)間限制,單位為秒
    MaxKeepAliveRequests 100:數(shù)量限制

  • 實(shí)驗(yàn):設(shè)置開(kāi)啟持久連接,時(shí)間限制150秒(為了方便做實(shí)驗(yàn)設(shè)置時(shí)間比較長(zhǎng),實(shí)際根據(jù)情況設(shè)置),數(shù)量限制100

vim /etc/httpd/conf/httpd.conf
KeepAlive On
KeepAliveTimeout 150
MaxKeepAliveRequests 100

telnet 192.168.136.229 80
GET /index.html HTTP/1.1
HOST:3.3.3.3     //目前服務(wù)器只管理一個(gè)域名,故可以隨便寫(xiě)
GET /hello.txt HTTP/1.1
HOST:5.5.5.5

(四)MPM(Multi-Processing Module)多路處理模塊

(1)MPM分類(lèi):prefork, worker, event
  • httpd-2.2不支持同時(shí)編譯多個(gè)模塊,所以只能編譯時(shí)選定一個(gè)
  • rpm安裝的包提供三個(gè)二進(jìn)制程序文件,分別用于實(shí)現(xiàn)對(duì)不同MPM機(jī)制的支持
    • /usr/sbin/httpd: prefork
    • /usr/sbin/httpd.worker: worker
    • /usr/sbin/httpd.event: event (test)
  • 查詢(xún)當(dāng)前使用的MPM機(jī)制
    ps aux | grep httpd
(2)模塊
  • 查看靜態(tài)編譯的模塊
    httpd -l
  • 查看靜態(tài)編譯及動(dòng)態(tài)裝載的模塊
    httpd -M
  • 動(dòng)態(tài)模塊加載:不需重啟即生效
  • 動(dòng)態(tài)模塊路徑:/usr/lib64/httpd/modules/
(3)切換使用的httpd程序
//切換至work模式
vim /etc/sysconfig/httpd
HTTPD=/usr/sbin/httpd.worker     //將行前的注釋符#刪除

httpd -t
service httpd restart
(4)prefork的默認(rèn)配置
vim /etc/httpd/conf/httpd.conf

<IfModule prefork.c>
StartServers       8       //啟動(dòng)開(kāi)啟的進(jìn)程數(shù)
MinSpareServers    5       //最少空閑進(jìn)程數(shù)
MaxSpareServers   20       //最大空閑進(jìn)程數(shù)
ServerLimit      256       //最多進(jìn)程數(shù),不能超過(guò)MaxClient,最大能設(shè)置為20000
MaxClients       256       //最大并發(fā)數(shù)
MaxRequestsPerChild  4000  //子進(jìn)程最多能處理的請(qǐng)求,達(dá)到設(shè)置值子進(jìn)程被父進(jìn)程終止,釋放內(nèi)存
</IfModule>
(5)worker的默認(rèn)配置
vim /etc/httpd/conf/httpd.conf

<IfModule worker.c>
StartServers         4
MaxClients         300
MinSpareThreads     25
MaxSpareThreads     75
ThreadsPerChild     25    
MaxRequestsPerChild  0     //無(wú)限制
</IfModule>

啟動(dòng)時(shí)開(kāi)啟4個(gè)進(jìn)程,每個(gè)進(jìn)程開(kāi)啟25個(gè)線(xiàn)程,共100個(gè)線(xiàn)程,但最多空閑75個(gè)線(xiàn)程,需要結(jié)束1個(gè)進(jìn)程共25個(gè)線(xiàn)程,故開(kāi)啟服務(wù)后實(shí)際只能開(kāi)到3個(gè)進(jìn)程共75個(gè)線(xiàn)程

(五)DSO(Dynamic Shared Object):動(dòng)態(tài)加載模塊

  • 加載動(dòng)態(tài)模塊配置文件:
    /etc/httpd/conf/httpd.conf

  • 配置指定模塊加載格式:
    LoadModule <mod_name> <mod_path>

  • 模塊文件路徑使用相對(duì)路徑:
    相對(duì)于ServerRoot(默認(rèn)/etc/httpd)

  • 實(shí)驗(yàn):取消加載模塊auth_basic_module

vim /etc/httpd/conf/httpd.conf
#LoadModule auth_basic_module modules/mod_auth_basic.so     //行前增加注釋符#
httpd -t

service httpd reload
httpd -M | grep auth_basic_module 

(六)定義Main server的文檔頁(yè)面路徑

  • 設(shè)置格式:DocumentRoot "/path"
    DocumentRoot指向的路徑為URL路徑的起始位置

  • 注意:SELinux和iptables的狀態(tài)影響設(shè)置是否生效

  • 實(shí)驗(yàn):將URL路徑的起始位置修改為/app

vim /etc/httpd/conf/httpd.conf
DocumentRoot "/app"     //修改此行的值為/app

httpd -t
service httpd reload
echo "/app/index.html" > /app/index.html     //在/app目錄下創(chuàng)建html文件
curl 192.168.136.229

(七)定義站點(diǎn)主頁(yè)面

  • 設(shè)置格式:DirectoryIndex index.html index.html.var

  • 當(dāng)URL并未明確目錄內(nèi)的文件時(shí),根據(jù)設(shè)置中的文件依次查詢(xún)

  • 實(shí)驗(yàn):當(dāng)訪(fǎng)問(wèn)bbs目錄,設(shè)置主頁(yè)面為index文件

mkdir /app/bbs
echo "/bbs/index" > /app/bbs/index
curl 192.168.136.229/bbs/                         //403 Forbidden 錯(cuò)誤
vim /etc/httpd/conf/httpd.conf
DirectoryIndex index.html index    //行尾添加index

httpd -t
service httpd reload
curl 192.168.136.229/bbs/ 

設(shè)置DirectoryIndex的值包含index前

設(shè)置DirectoryIndex的值包含index后

(八)站點(diǎn)訪(fǎng)問(wèn)控制常見(jiàn)機(jī)制

訪(fǎng)問(wèn)控制機(jī)制有兩種:客戶(hù)端來(lái)源地址,用戶(hù)賬號(hào)

(1)被訪(fǎng)問(wèn)控制的資源描述方式:
  • 文件系統(tǒng)路徑:

    • 目錄匹配
    <Directory "/path">
    ...
    </Directory>
    
    • 文件匹配
    <File "/path/file">
    ...
    </File>
    
    • 文件正則表達(dá)式匹配
    <FileMatch "PATTERN">
    ...
    </FileMatch>
    
  • URL路徑:

    • URL匹配:
    <Location "   ">
    ...
    </Location>
    
    • URL正則表達(dá)式匹配
    <LocationMatch"   ">
    ...
    </LocationMatch>
    
(2)基于源地址的訪(fǎng)問(wèn)控制:
1)Options:后跟1個(gè)或多個(gè)以空白字符分隔的選項(xiàng)列表
  • 選項(xiàng)前的+,-表示增加或刪除指定選項(xiàng)

  • 常見(jiàn)選項(xiàng):
    Indexes:指明的URL路徑下不存在與定義的主頁(yè)面資源相符的資源文件時(shí),返回索引列表給用戶(hù)
    FollowSymLinks:允許訪(fǎng)問(wèn)符號(hào)鏈接文件所指向的源文件
    None:全部禁用
    All:全部允許

  • 實(shí)驗(yàn):取消DirectoryIndex的值包含index,訪(fǎng)問(wèn)/bbs目錄時(shí)不顯示403錯(cuò)誤而是該目錄下的文件

    vim /etc/httpd/conf.d/bbs.conf     //建立獨(dú)立配置文件
    <Directory "/app/bbs">
        Options lndexes
    </Directory>
    
    httpd -t
    service httpd reload
    
2)AllowOverride
  • 指定目錄下的.htaccess(由AccessFileName指定)文件中哪些訪(fǎng)問(wèn)控制相關(guān)的指令可以生效

    • 只對(duì)<directory>語(yǔ)句有效
    • AllowOverride All:所有指令都有效
    • AllowOverride None:所有指令都無(wú)效
    • AllowOverride AuthConfig Indexes:只有AuthConfig 和Indexes指令可以生效
  • 實(shí)驗(yàn):在/app/bbs/目錄下建立.htaccess文件,授予本目錄FollowSymLinks的權(quán)限。

echo "Options FollowSymLinks" > /app/bbs/.htaccess
ln -s /etc/issue /app/bbs/issue.link
httpd -t
service httpd reload
curl 192.168.136.229/bbs/issue.link     //403錯(cuò)誤,因?yàn)檫€沒(méi)有AllowOverride授權(quán)
vim /etc/httpd/conf.d/bbs.conf
<Directory "/app/bbs">
        Options Indexes
        AllowOverride FollowSymLinks    
</Directory>

httpd -t
service httpd reload
curl 192.168.136.229/bbs/issue.link     //成功

AllowOverride授權(quán)前

AllowOverride授權(quán)后

3)Order和Allow、Deny
  • Order:定義生效次序;寫(xiě)在后面的表示默認(rèn)法則

    • Order allow,deny:后面設(shè)置出現(xiàn)沖突,以deny為法則
    • Order deny,allow:后面設(shè)置出現(xiàn)沖突,以allow為法則
  • Allow|Deny from IP

  • 實(shí)驗(yàn):
    只允許IP為192.168.136.230的主機(jī)訪(fǎng)問(wèn)服務(wù)器的html文件

vim /etc/httpd/conf.d/allowdeny.conf
<files "*.html">
        order deny,allow
        allow from 192.168.136.230
        deny from 192.168.136
</files>

httpd -t
service httpd reload

當(dāng)192.168.136.230的配置出現(xiàn)沖突,默認(rèn)以order行中靠后的allow為默認(rèn)法則
故允許192.168.136.230訪(fǎng)問(wèn)服務(wù)器的html文件

192.168.136.0的配置沒(méi)有出現(xiàn)沖突,故不允許網(wǎng)段的其他主機(jī)訪(fǎng)問(wèn)服務(wù)器的html文件

不允許IP為192.168.136.230的主機(jī)訪(fǎng)問(wèn)服務(wù)器的html文件

vim /etc/httpd/conf.d/allowdeny.conf
<files "*.html">
        order allow,deny
        allow from 192.168.136.230
        deny from 192.168.136
</files>

httpd -t
service httpd reload

當(dāng)192.168.136.230的配置出現(xiàn)沖突,默認(rèn)以order行中靠后的deny為默認(rèn)法則
故不允許192.168.136.230訪(fǎng)問(wèn)服務(wù)器的html文件

192.168.136.0的配置沒(méi)有出現(xiàn)沖突,故仍舊不允許網(wǎng)段的其他主機(jī)訪(fǎng)問(wèn)服務(wù)器的html文件

(九)日志設(shè)置

  • 日志類(lèi)型:
    訪(fǎng)問(wèn)日志:/etc/httpd/logs/access_log
    錯(cuò)誤日志:/etc/httpd/logs/error_log

  • 訪(fǎng)問(wèn)日志:

    • 定義日志格式:
      LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

    • 使用日志格式:
      CustomLog logs/access_log combined

    • 日志格式標(biāo)識(shí)符含義
      %h:客戶(hù)端IP地址
      %l:遠(yuǎn)程用戶(hù),啟用mod_ident才有效,通常為減號(hào)“-”
      %u:驗(yàn)證(basic,digest)遠(yuǎn)程用戶(hù),非登錄訪(fǎng)問(wèn)時(shí),為一個(gè)減號(hào)“-”
      %t:服務(wù)器收到請(qǐng)求時(shí)的時(shí)間
      %r:First line of request,即表示請(qǐng)求報(bào)文的首行;記錄了此次請(qǐng)求的“方法”,“URL”以及協(xié)議版本
      %>s:響應(yīng)狀態(tài)碼
      %b:響應(yīng)報(bào)文的大小,單位是字節(jié);不包括響應(yīng)報(bào)文http首部
      %{Referer}i:請(qǐng)求報(bào)文中首部“referer”的值;即從哪個(gè)頁(yè)面中的超鏈接跳轉(zhuǎn)至當(dāng)前頁(yè)面的
      %{User-Agent}i:請(qǐng)求報(bào)文中首部“User-Agent”的值;即發(fā)出請(qǐng)求的應(yīng)用程序

  • 實(shí)驗(yàn):自定義訪(fǎng)問(wèn)日志的格式,包含客戶(hù)端IP、請(qǐng)求文件在硬盤(pán)的路徑、時(shí)間、請(qǐng)求的URL

/etc/httpd/conf/httpd.conf
LogFormat "%h %f %t %U"  hello
CustomLog logs/access_log hello

httpd -t
service httpd reload

(十)設(shè)定默認(rèn)字符集

  • 設(shè)置格式:AddDefaultCharset UTF-8

  • 中文字符集:GBK, GB2312, GB18030

  • 實(shí)驗(yàn):將默認(rèn)字符集改為GB2312

vim /etc/httpd/conf/httpd.conf
AddDefaultCharset GB2312
httpd -t
service httpd reload

(十一)定義路徑別名

  • 設(shè)置格式:Alias /URL/ "/PATH/"

  • 實(shí)驗(yàn):當(dāng)?shù)卿?92.168.136.229/bbs時(shí),在服務(wù)器訪(fǎng)問(wèn)磁盤(pán)/app/forum目錄而不是默認(rèn)的/app/bbs目錄

vim /etc/httpd/conf.d/bbs.conf
Alias /bbs /app/forum

mkdir /app/forum
echo "/app/forum/index.html" > /app/forum/index.html
httpd -t
service httpd reload
curl 192.168.136.229/bbs/

(十二)基于用戶(hù)的訪(fǎng)問(wèn)控制

(1)認(rèn)證的相關(guān)概念
  • 認(rèn)證質(zhì)詢(xún)(WWW-Authenticate):響應(yīng)碼為401,拒絕客戶(hù)端請(qǐng)求,并說(shuō)明要求客戶(hù)端提供賬號(hào)和密碼

  • 認(rèn)證(Authorization):客戶(hù)端用戶(hù)填入賬號(hào)和密碼后再次發(fā)送請(qǐng)求報(bào)文;認(rèn)證通過(guò)時(shí),則服務(wù)器發(fā)送響應(yīng)的資源

  • 認(rèn)證方式兩種:
    basic:明文
    digest:消息摘要認(rèn)證,兼容性差

  • 安全域:需要用戶(hù)認(rèn)證后方能訪(fǎng)問(wèn)的路徑;應(yīng)該通過(guò)名稱(chēng)對(duì)其進(jìn)行標(biāo)識(shí),以便于告知用戶(hù)認(rèn)證的原因

  • 用戶(hù)的賬號(hào)和密碼
    虛擬賬號(hào):僅用于訪(fǎng)問(wèn)某服務(wù)時(shí)用到的認(rèn)證標(biāo)識(shí)
    存儲(chǔ):文本文件,SQL數(shù)據(jù)庫(kù),ldap目錄存儲(chǔ),nis等

(2)basic認(rèn)證
  • basic認(rèn)證配置格式:

    1. 定義安全域
    <Directory "/path">
    AuthType Basic                                  //認(rèn)證方式
    AuthName "String"                               //認(rèn)證提示字符串
    AuthUserFile "/PATH/HTTPD_USER_PASSWD_FILE"     //認(rèn)證文件路徑
    Require user username1 username2 ...     //允許訪(fǎng)問(wèn)安全域的用戶(hù)
    </Directory>
    

    允許賬號(hào)文件中的所有用戶(hù)登錄訪(fǎng)問(wèn):Require valid-user

    1. 使用htpasswd命令生成存儲(chǔ)賬號(hào)密碼的文件
    htpasswd [options] /PATH/HTTPD_PASSWD_FILE username
    -c:自動(dòng)創(chuàng)建文件,僅應(yīng)該在文件不存在時(shí)使用
    -m:md5格式加密
    -s:sha格式加密
    -D:刪除指定用戶(hù)
    
  • 實(shí)驗(yàn):只允許用戶(hù)tom, jerry登錄192.168.136.229/secret目錄

//1. 定義安全域
mkdir /app/secret
echo "/app/secret/index.html" > /app/secret/index.html
vim /etc/httpd/conf.d/auth.conf
<Directory /app/secret>
        AuthType basic
        AuthName "secret zone"
        AuthUserFile "/etc/httpd/conf.d/authuser"
        Require user tom jerry
</Directory>

//2. 生成存儲(chǔ)用戶(hù)密碼的文件
htpasswd  -c /etc/httpd/conf.d/authuser tom     //-c:第一次創(chuàng)建文件用
htpasswd  -s /etc/httpd/conf.d/authuser jerry   //-s:SHA加密
htpasswd  -s /etc/httpd/conf.d/authuser john

//3. 測(cè)試
httpd -t
service httpd reload
使用瀏覽器, curl, links測(cè)試
(3)基于組賬號(hào)認(rèn)證
  • 組賬號(hào)認(rèn)證配置格式:
    1. 定義安全域
    <Directory "/path">
    AuthType Basic                                 
    AuthName "String"                             
    AuthUserFile "/PATH/HTTPD_USER_PASSWD_FILE"     
    AuthGroupFile "/PATH/HTTPD_GROUP_FILE"
    Require group grpname1 grpname2 ...     //允許訪(fǎng)問(wèn)安全域的組
    </Directory>
    
    1. 創(chuàng)建用戶(hù)賬號(hào)和組賬號(hào)文件
      組文件:每一行定義一個(gè)組
      GRP_NAME: username1 username2 ...
(4)遠(yuǎn)程客戶(hù)端和用戶(hù)驗(yàn)證的控制
  • Satisfy ALL|Any
    ALL:驗(yàn)證條件需要都通過(guò)才可以
    Any:驗(yàn)證條件有一個(gè)滿(mǎn)足即可

  • 實(shí)驗(yàn):允許用戶(hù)組webgrp1中的用戶(hù)(tom, jerry)或來(lái)自192.168.136.230的主機(jī)登錄192.168.136.229/admin目錄

//1. 定義安全域
mkdir /app/admin
echo "/app/admin/index.html" > /app/admin/index.html
vim /etc/httpd/conf.d/auth.conf
<Directory /app/admin>
        AuthType basic
        AuthName "admin zone"
        AuthUserFile "/etc/httpd/conf.d/authuser"
        AuthGroupFile "/etc/httpd/conf.d/authgrp"
        Require group webgrp1 
        Order deny,allow
        allow from 192.168.136.230
        deny from 192.168.136
        Satisfy Any
</Directory>

//2. 定義組賬號(hào)文件
/etc/httpd/conf.d/authgrp
webgrp1: tom jerry
webgrp2: john

//3. 測(cè)試
httpd -t
service httpd reload
使用瀏覽器, curl, links測(cè)試

(十三)虛擬主機(jī)

  • 有三種實(shí)現(xiàn)方案:

    • 基于ip:為每個(gè)虛擬主機(jī)準(zhǔn)備至少一個(gè)ip地址
    • 基于port:為每個(gè)虛擬主機(jī)使用至少一個(gè)獨(dú)立的port
    • 基于FQDN:為每個(gè)虛擬主機(jī)使用至少一個(gè)FQDN
    • 注意:一般虛擬機(jī)不要與main主機(jī)混用;因此,要使用虛擬主機(jī),一般先禁用main主機(jī)
    • 禁用方法:注釋中心主機(jī)的DocumentRoot指令即可
  • 虛擬主機(jī)的配置方法:

<VirtualHost IP:PORT>
    ServerName FQDN
    DocumentRoot "/path"
</VirtualHost>

建議:上述配置存放在獨(dú)立的配置文件中

  • 其它可用指令:
    ServerAlias:虛擬主機(jī)的別名;可多次使用
    ErrorLog:錯(cuò)誤日志
    CustomLog:訪(fǎng)問(wèn)日志

  • 實(shí)驗(yàn)1:實(shí)現(xiàn)基于IP的虛擬主機(jī)

//1. 編輯獨(dú)立配置文件
vim /etc/httpd/conf.d/virtualhost.conf
<VirtualHost 192.168.136.10:80>
        DocumentRoot "/app/website1"
</VirtualHost>
<VirtualHost 192.168.136.20:80>
        DocumentRoot "/app/website2"
</VirtualHost>
<VirtualHost 192.168.136.30:80>
        DocumentRoot "/app/website3"
</VirtualHost>

//2. 建立網(wǎng)頁(yè)文件目錄
mkdir /app/website{1..3}
echo "/app/website1/index.html" > /app/website1/index.html
echo "/app/website2/index.html" > /app/website2/index.html
echo "/app/website3/index.html" > /app/website3/index.html

//3. 建立相應(yīng)的IP地址
ip a a 192.168.136.10 dev eth1
ip a a 192.168.136.20 dev eth1
ip a a 192.168.136.30 dev eth1

//4. 測(cè)試
service httpd reload
curl 192.168.136.10
curl 192.168.136.20
curl 192.168.136.30
  • 實(shí)驗(yàn)2:實(shí)現(xiàn)基于端口的虛擬主機(jī)
//1. 編輯獨(dú)立配置文件
vim /etc/httpd/conf.d/virtualhost.conf
Listen 81
Listen 82
Listen 83
<VirtualHost 192.168.136.40:81>
        DocumentRoot "/app/website1"
</VirtualHost>
<VirtualHost 192.168.136.40:82>
        DocumentRoot "/app/website2"
</VirtualHost>
<VirtualHost 192.168.136.40:83>
        DocumentRoot "/app/website3"
</VirtualHost>

//2. 建立相應(yīng)的IP地址
service network restart     //清空上一個(gè)實(shí)驗(yàn)臨時(shí)增加的IP
ip a a 192.168.136.40 dev eth1

//3. 測(cè)試
service httpd reload
curl 192.168.136.40:81
curl 192.168.136.40:82
curl 192.168.136.40:83
  • 實(shí)驗(yàn)3:實(shí)現(xiàn)基于FQDN的虛擬主機(jī),每個(gè)虛擬主機(jī)都有一個(gè)配置文件
//1. 編輯獨(dú)立配置文件
vim /etc/httpd/conf.d/virtualhost.conf
NameVirtualHost *:80
<VirtualHost *:80>
        ServerName www.hello.com
        DocumentRoot "/app/website1"
        CustomLog logs/www.hello.com-access_log common
</VirtualHost>
<VirtualHost *:80>
        ServerName www.hi.cn
        DocumentRoot "/app/website2"
        CustomLog logs/www.hi.cn-access_log common
</VirtualHost>
<VirtualHost *:80>
        ServerName www.bye.net
        DocumentRoot "/app/website3"
        CustomLog logs/www.bye.net-access_log common
</VirtualHost>

httpd -t
service httpd reload

//2. 配置DNS服務(wù)器或者編輯hosts文件

//3. 測(cè)試
curl www.hello.com
curl www.hi.cn
curl www.bye.net

(十四)status頁(yè)面

  • 需要加載status_module模塊

  • 配置格式:

LoadModule status_module modules/mod_status.so
<Location /server-status>
SetHandler server-status
Order allow,deny
Allow from 172.16     //只允許172.16.0.0網(wǎng)段主機(jī)訪(fǎng)問(wèn)status頁(yè)面
</Location>
ExtendedStatus On 顯示擴(kuò)展信息
  • 實(shí)驗(yàn):只允許192.168.136.0/32網(wǎng)段的主機(jī)訪(fǎng)問(wèn)192.168.136.229的status頁(yè)面
vim /etc/httpd/conf.d/status.conf
LoadModule status_module modules/mod_status.so    //默認(rèn)在/etc/httpd/conf/httpd.conf文件中開(kāi)啟
<Location /status>
        SetHandler server-status
        Order allow,deny
        Allow from 192.168.136.
</Location>
ExtendedStatus On

httpd -t
service httpd reload

二、http協(xié)議

(一)http協(xié)議特點(diǎn)

  • http協(xié)議:stateless 無(wú)狀態(tài)
    服務(wù)器無(wú)法持續(xù)追蹤訪(fǎng)問(wèn)者來(lái)源
  • 解決http協(xié)議無(wú)狀態(tài)方法
    cookie 客戶(hù)端存放
    session 服務(wù)端存放

(二)http報(bào)文

  • 請(qǐng)求報(bào)文由請(qǐng)求行、首部行和實(shí)體主體組成

    • 格式:
    <method> <request-URL> <version>
    <headers>
    <entity-body>
    
  • 響應(yīng)報(bào)文由狀態(tài)行、首部行和實(shí)體主體組成

    • 格式:
    <version> <status> <reason-phrase>
    <headers>
    <entity-body>
    
  • 報(bào)文組成簡(jiǎn)要描述:

    • method
      請(qǐng)求方法,標(biāo)明客戶(hù)端希望服務(wù)器對(duì)資源執(zhí)行的動(dòng)作:GET、HEAD、POST等
    • version
      HTTP/<major>.<minor>
    • status
      三位數(shù)字,如200、301、302、404、502,標(biāo)記請(qǐng)求處理過(guò)程中發(fā)生的情況
    • reason-phrase:
      狀態(tài)碼所標(biāo)記狀態(tài)的簡(jiǎn)要描述
    • headers
      每個(gè)請(qǐng)求或響應(yīng)報(bào)文可包含任意個(gè)首部;每個(gè)首部都有首部名稱(chēng),后面跟一個(gè)冒號(hào),而后跟一個(gè)可選空格,接著是一個(gè)值
    • entity-body
      請(qǐng)求時(shí)附加的數(shù)據(jù)或響應(yīng)時(shí)附加的數(shù)據(jù)

(三)method方法

  • GET:從服務(wù)器獲取一個(gè)資源
  • HEAD:只從服務(wù)器獲取文檔的響應(yīng)首部
  • POST:向服務(wù)器輸入數(shù)據(jù),通常會(huì)再由網(wǎng)關(guān)程序繼續(xù)處理
  • PUT:將請(qǐng)求的主體部分存儲(chǔ)在服務(wù)器中,如上傳文件
  • DELETE:請(qǐng)求刪除服務(wù)器上指定的文檔
  • TRACE:追蹤請(qǐng)求到達(dá)服務(wù)器中間經(jīng)過(guò)的代理服務(wù)器
  • OPTIONS:請(qǐng)求服務(wù)器返回對(duì)指定資源支持使用的請(qǐng)求方

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

  • 分類(lèi):

    • 1xx:100-101信息提示
    • 2xx:200-206成功
    • 3xx:300-305重定向
    • 4xx:400-415錯(cuò)誤類(lèi)信息,客戶(hù)端錯(cuò)誤
    • 5xx:500-505錯(cuò)誤類(lèi)信息,服務(wù)器端錯(cuò)誤
  • 常用狀態(tài)碼

    • 200:成功,請(qǐng)求數(shù)據(jù)通過(guò)響應(yīng)報(bào)文的entity-body部分發(fā)送;OK
    • 301:請(qǐng)求的URL指向的資源已經(jīng)被刪除;但在響應(yīng)報(bào)文中通過(guò)首部Location指明了資源現(xiàn)在所處的新位置;Moved Permanently(永久重定向)
    • 302:響應(yīng)報(bào)文Location指明資源臨時(shí)新位置;Moved Temporarily(臨時(shí)重定向)
    • 304:客戶(hù)端發(fā)出了條件式請(qǐng)求,但服務(wù)器上的資源未曾發(fā)生改變,則通過(guò)響應(yīng)此響應(yīng)狀態(tài)碼通知客戶(hù)端;Not Modified
    • 401:需要輸入賬號(hào)和密碼認(rèn)證方能訪(fǎng)問(wèn)資源;Unauthorized
    • 403:請(qǐng)求被禁止;Forbidden
    • 404:服務(wù)器無(wú)法找到客戶(hù)端請(qǐng)求的資源;Not Found
    • 500:服務(wù)器內(nèi)部錯(cuò)誤;Internal Server Error
    • 502:代理服務(wù)器從后端服務(wù)器收到了一條偽響應(yīng),如無(wú)法連接到網(wǎng)關(guān);Bad Gateway
    • 503:服務(wù)不可用,臨時(shí)服務(wù)器維護(hù)或過(guò)載,服務(wù)器無(wú)法處理請(qǐng)求;Service Unavailable
    • 504:網(wǎng)關(guān)超時(shí);Gateway Timeout

(四)首部

  • 分類(lèi):通用首部、請(qǐng)求首部、響應(yīng)首部、實(shí)體首部、擴(kuò)展首部

  • 通用首部:
    Date:報(bào)文的創(chuàng)建時(shí)間
    Connection:連接狀態(tài),如keep-alive, close
    Via:顯示報(bào)文經(jīng)過(guò)的中間節(jié)點(diǎn)(代理,網(wǎng)關(guān))
    Cache-Control:控制緩存,如緩存時(shí)長(zhǎng)
    MIME-Version:發(fā)送端使用的MIME版本

  • 請(qǐng)求首部:
    Accept:通知服務(wù)器自己可接受的媒體類(lèi)型
    Accept-Charset:客戶(hù)端可接受的字符集
    Accept-Encoding:客戶(hù)端可接受編碼格式,如gzip
    Accept-Language:客戶(hù)端可接受的語(yǔ)言
    Client-IP:請(qǐng)求的客戶(hù)端IP
    Host:請(qǐng)求的服務(wù)器名稱(chēng)和端口號(hào)
    Referer:跳轉(zhuǎn)至當(dāng)前URL的前一個(gè)URL
    User-Agent:客戶(hù)端代理,瀏覽器版本

  • 條件式請(qǐng)求首部:
    Expect:允許客戶(hù)端列出某請(qǐng)求所要求的服務(wù)器行為
    If-Modified-Since:自從指定的時(shí)間之后,請(qǐng)求的資源是否發(fā)生過(guò)修改
    If-Unmodified-Since:與上面相反
    If-None-Match:本地緩存中存儲(chǔ)的文檔的ETag標(biāo)簽是否與服務(wù)器文檔的Etag不匹配
    If-Match:與上面相反

  • 安全請(qǐng)求首部:
    Authorization:向服務(wù)器發(fā)送認(rèn)證信息,如賬號(hào)和密碼
    Cookie:客戶(hù)端向服務(wù)器發(fā)送cookie
    Cookie2:用于說(shuō)明請(qǐng)求端支持的cookie版本

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

  • 信息響應(yīng)首部:
    Age:從最初創(chuàng)建開(kāi)始,響應(yīng)持續(xù)時(shí)長(zhǎng)
    Server:服務(wù)器程序軟件名稱(chēng)和版本

  • 協(xié)商響應(yīng)首部:某資源有多種表示方法時(shí)使用
    Accept-Ranges:服務(wù)器可接受的請(qǐng)求范圍類(lèi)型
    Vary:服務(wù)器查看的其它首部列表

  • 安全響應(yīng)首部:
    Set-Cookie:向客戶(hù)端設(shè)置cookie
    Set-Cookie2:與上面相似
    WWW-Authenticate:來(lái)自服務(wù)器對(duì)客戶(hù)端的質(zhì)詢(xún)列表

  • 實(shí)體首部:
    Allow:列出對(duì)此資源實(shí)體可使用的請(qǐng)求方法
    Location:告訴客戶(hù)端真正的實(shí)體位于何處
    Content-Encoding:對(duì)主體執(zhí)行的編碼
    Content-Language:理解主體時(shí)最適合的語(yǔ)言
    Content-Length:主體的長(zhǎng)度
    Content-Location:實(shí)體真正所處位置
    Content-Type:主體的對(duì)象類(lèi)型,如text
    緩存相關(guān):
    ETag:實(shí)體的擴(kuò)展標(biāo)簽
    Expires:實(shí)體的過(guò)期時(shí)間
    Last-Modified:最后一次修改的時(shí)間

三、curl和elinks工具

(一)curl工具

  • 語(yǔ)法:curl [options] [URL...]

  • 選項(xiàng):
    -A/--user-agent <string>:設(shè)置用戶(hù)代理(瀏覽器)發(fā)送給服務(wù)器
    -e/--referer <URL>:來(lái)源網(wǎng)址(從哪個(gè)網(wǎng)址跳轉(zhuǎn)過(guò)來(lái))
    --cacert <file>:CA證書(shū)(SSL)
    -k/--insecure:允許忽略證書(shū)進(jìn)行SSL 連接
    --compressed:要求返回壓縮的格式
    -H/--header <line>:自定義首部信息傳遞給服務(wù)器
    -i:顯示頁(yè)面內(nèi)容,包括報(bào)文首部信息
    -I/--head:只顯示響應(yīng)報(bào)文首部信息
    -D/--dump-header <file>:將url的header信息存放在指定文件中
    --limit-rate <rate>:設(shè)置傳輸速度
    --basic:使用HTTP基本認(rèn)證
    -u/--user <user[:password]>:設(shè)置服務(wù)器的用戶(hù)和密碼
    -L:如果有3xx響應(yīng)碼,重新發(fā)請(qǐng)求到新位置
    -o <file>:將網(wǎng)絡(luò)文件保存為指定的文件中
    -O:使用URL中默認(rèn)的文件名保存文件到本地
    -0/--http1.0:使用HTTP 1.0
    -C:可對(duì)文件使用斷點(diǎn)續(xù)傳功能
    -c/--cookie-jar <file name>:將url中cookie存放在指定文件中
    -x/--proxy <proxyhost[:port]>:指定代理服務(wù)器地址
    -X/--request <command>:向服務(wù)器發(fā)送指定請(qǐng)求方法
    -U/--proxy-user <user:password>:代理服務(wù)器用戶(hù)和密碼
    -T:將指定的本地文件上傳到FTP服務(wù)器上
    --data/-d:指定使用POST方式傳遞數(shù)據(jù)

  • 實(shí)驗(yàn):curl工具使用

curl -A "Internet Explorer 12" 192.168.136.229
curl -e "www.baidu.com" 192.168.136.229
curl -H host: www.hello.com 192.168.136.229
curl -D head.txt 192.168.136.229
curl --limit-rate 2048 -O ftp://172.18.0.1/pub/ISOs/CentOS-7-x86_64-Everything-1708.iso
curl -I -L www.360buy.com 

-A選項(xiàng):偽造瀏覽器和-e選項(xiàng):偽造轉(zhuǎn)發(fā)地址

-H選項(xiàng):存在虛擬主機(jī)時(shí),指定host首部信息返回不同結(jié)果

-D選項(xiàng):保存相應(yīng)報(bào)文首部信息到文件

--limit-rate選項(xiàng):限制下載速度,單位B/s; -O 按照默認(rèn)文件名存儲(chǔ)

-L選項(xiàng):強(qiáng)制重定向,下面的例子可以看到兩次重定向跳轉(zhuǎn)過(guò)程

(二)elinks工具:

  • 語(yǔ)法:elinks[OPTION]... [URL]...

  • 選項(xiàng):
    -dump:非交互式模式,將URL的內(nèi)容輸出至標(biāo)準(zhǔn)輸出(只輸出網(wǎng)頁(yè)文本內(nèi)容)
    -source:打印源碼

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 本篇文章篇幅比較長(zhǎng),先來(lái)個(gè)思維導(dǎo)圖預(yù)覽一下。 一、概述 1.計(jì)算機(jī)網(wǎng)絡(luò)體系結(jié)構(gòu)分層 2.TCP/IP 通信傳輸流 ...
    滌生_Woo閱讀 56,226評(píng)論 24 557
  • 本文是《圖解HTTP》讀書(shū)筆記的第二篇,主要包括此書(shū)的第六章內(nèi)容,因?yàn)榈诹碌膬?nèi)容較多,而且比較重要,所以單獨(dú)寫(xiě)為...
    lijiankun24閱讀 1,502評(píng)論 0 6
  • http協(xié)議及Apache服務(wù) http協(xié)議 什么是http? http全稱(chēng)為超文件傳輸協(xié)議(Hyper text...
    魏鎮(zhèn)坪閱讀 2,439評(píng)論 0 1
  • 1. 網(wǎng)絡(luò)基礎(chǔ)TCP/IP HTTP基于TCP/IP協(xié)議族,HTTP屬于它內(nèi)部的一個(gè)子集。 把互聯(lián)網(wǎng)相關(guān)聯(lián)的協(xié)議集...
    yozosann閱讀 3,616評(píng)論 0 20
  • 一 葉初靜,夢(mèng)寒輕。月上柳梢枝上明,梧桐墜,堪腸歲。無(wú)言有淚,西風(fēng)獨(dú)睡。愧!愧!愧! 病千索,卻情何?;晁铺祚R渡銀...
    迷曳閱讀 392評(píng)論 0 1

友情鏈接更多精彩內(nèi)容