http協議(2.2&2.4)RPM搭建配置

http協議(2.2&2.4)RPM搭建配置

httpd的程序環境:

主程序文件:/usr/sbin/httpd

CentOS6系列(默認httpd2.2)

1)配置文件:

/etc/httpd/conf/httpd.conf、  /etc/httpd/conf.d/*.conf

2)服務腳本:

/etc/rc.d/init.d/httpd
    配置文件:/etc/sysconfig/httpd

3)主程序文件:

/usr/sbin/httpd、  /usr/sbin/httpd.event、  /usr/sbin/httpd.worker

4)日志文件目錄:

/var/log/httpd  access_log: 訪問日志;error_log:錯誤日志

5)站點文檔目錄:

/var/www/html

6)模塊文件路徑:

/usr/lib64/httpd/modules

7)配置文件的組成:

~]# grep "Section" /etc/httpd/conf/httpd.conf

Section 1: Global Environment
Section 2: 'Main' server configuration
Section 3: Virtual Hosts

8)配置格式:directivevalue

directive: 不區分字符大小寫;value: 為路徑時,取決于文件系統;
主配置文件概述

http協議(2.2&2.4)RPM搭建配置

### Section 1:  Global Environment 全局配置段
### Section 2:  'Main' server configuration 中心主機配置段
### Section 3:  Virtual Hosts 虛擬主機配置段

全局配置:其中的指令用于在全局層面配置一個Apache服務器相關屬性

中心主機配置:其中的指令用于定義"主要"或者"默認"的服務,改段參數也能夠夠提供虛擬主機端配置的相關指令

虛擬主機段:允許Web請求從不同的IP、FQDN或者同一臺Apache服務器的不同進程端口被發送

注意:中心主機段和虛擬主機段不能同時被發送,虛擬主機段可以在/etc/httpd/conf.d/*.conf被定義

CentOS7系列(默認httpd2.4)

1)配置文件:

/etc/httpd/conf/httpd.conf、  /etc/httpd/conf.d/*.conf

2)模塊相關的配置文件:

/etc/httpd/conf.modules.d/*.conf
    systemd unit file:/usr/lib/systemd/system/httpd.service

3)主程序文件:

/usr/sbin/httpd(httpd-2.4支持MPM的動態切換)

4)日志文件目錄:

/var/log/httpd  access_log: 訪問日志;error_log:錯誤日志

5)站點文檔:

/var/www/html

6)模塊文件路徑:

/usr/lib64/httpd/modules

7)服務控制:

systemctl  enable|disable  httpd.service 設置開機啟動和關閉服務
systemctl  {start|stop|restart|status|reload}  httpd.service
/usr/sbin/apachectl 自帶腳本

httpd-2.2&2.4的基礎配置

配置文件格式:每一行一個配置指令組成

DIRECTIVE VALUE
    DIRECTIVE: 不區分字符大小寫;例如ServerRoot;
    VALUE:除了文件系統路徑,大多數也不區分字符大小寫;

配置修改完成后:

(1) 測試語法;
    ~]# httpd -t        
(2) 讓服務程序重載配置文件:
    ~]# service httpd reload (centos 6)
    ~]# systemctl  reload  httpd.service (centos 7)
1)修改監聽的地址和端口
Listen [ip:]port 
Listen指令可重復出現多次;
PORT不能省略,但ip可以省略;省略ip表示監聽0.0.0.0.,即本機所有可用IP;
修改監聽socker,不能重新加載服務配置,必須重啟服務才能生效
注意:在添加了監聽地址和端口后不需要重啟服務,只要重載配置文件即可生效,但是如果刪除了某一端口就必須重啟服務

示例:

httpd]# vim conf/httpd.conf  打開全局配置文件,在listen區段加入需要監聽的端口和ip

http協議(2.2&2.4)RPM搭建配置

]# systemctl reload httpd.service 重載配置文件
]# ss -tnl 查看端口是否已經處于監聽狀態

http協議(2.2&2.4)RPM搭建配置

在瀏覽器訪問各個端口可訪問

http協議(2.2&2.4)RPM搭建配置

2)保持連接
persistent connection:tcp連接建立后,資源獲取完成之后不會斷開連接,而是繼續等待請求其它資源; 
                       通過連接請求數量限制或者時間長短限制來實現TCP連接的斷開
弊端:對并發訪問量較大的服務器,長連接機制會使得后續某些請求無法得到正常響應;
解決方法:使用較短的持久連接時長,以及較少的請求數量;httpd-2.4 支持毫秒級持久時間;             
        KeepAlive (保持連接) On|Off 
        MaxKeepAliveRequests (一次持久連接最多支持請求多少個資源) 100
        KeepAliveTimeout (一次持久連接的保持時間) 10

示例:

httpd]# vim conf.d/keepalive.conf 編輯持久連接配置文件,寫入以下內容
    KeepAlive On 保持連接開啟
    MaxKeepAliveRequests 20 一次持久連接允許20次請求
    KeepAliveTimeout 5 一次持久連接保持時間為5秒
httpd]# systemctl reload httpd.service 重載配置文件
瀏覽器訪問查看請求報文持久連接生效

http協議(2.2&2.4)RPM搭建配置

http協議(2.2&2.4)RPM搭建配置

再次編輯保持連接配置文件關閉此功能,使用瀏覽器查看到服務器端響應報文顯示此功能處于關閉狀態,而對于客戶端的請求報文則顯示keepa-live,
此意表示盡可能的保持連接,客戶端請求時當然以能夠保持連接為最好,因為傳輸效率高.但是服務器端不支持所以只能close,所有請求和響應要看雙方是否共同支持

http協議(2.2&2.4)RPM搭建配置 http協議(2.2&2.4)RPM搭建配置

3)DSO:動態共享模塊機制,配置指令實現模塊加載

通過配置指令動態加卸載模塊:LoadModule modname modules/modfile_name

模塊路徑可使用相對地址[ServerRoot指令(/etc/httpd)]指向的路徑而言:/etc/httpd/modules/ 若不需要啟用該模塊,僅需用#將其注釋即可

httpd命令:

顯示所有已經裝載了的模塊
-t -D DUMP_MODULES : show all loaded modules
-M : a synonym for -t -D DUMP_MODULES

模塊配置文件在/etc/httpd/conf.modules.d/00-base.conf 而在/etc/httpd/conf.modules.d/目錄下有很多00開頭的文件,00,01,02這些是為了做排序的,越考前越優先被加載.

使用vim命令打開/etc/httpd/conf.modules.d/00-base.conf配置文件可以看到有一大堆模塊,如果某個功能不想用了,只需要將其注釋掉即可.

http協議(2.2&2.4)RPM搭建配置

注意:有些功能可能會被其他模塊所依賴

示例:

]# httpd -M |grep "suexec"
suexec_module (shared) 使用httpd -M 可看到suexec_module已經被裝載

httpd]# vim conf.modules.d/00-base.conf 打開模塊配置文件注釋掉sueexec_module模塊
]# systemctl reload httpd.service 重載配置文件
[root@localhost httpd]# httpd -M |grep "suexec"
[root@localhost httpd]#   再次使用httpd -M 已經看不到sueexec_module模塊了
4)定義站點主頁

用戶訪問時,定義多個主頁的時候,從左向右逐個遍歷,若都無法找到

1)報錯&重新指向錯誤提示頁面

2)返回索引列表,危險,一般僅用在下載站點

DirectoryIndex filename1 filename2 …

http協議(2.2&2.4)RPM搭建配置

5)Main Server中心服務器的相關配置
(1) DocumentRoot:站點文檔根路徑;
(2) ServerName:服務器名稱;
    servername這個指令默認是被注釋的,一旦被注釋了的話,它會嘗試著反向解析當前主機的IP地址到一個主機名,然后把那個主機名當作servername,
    但是那個主機名反向解析的結果和當前主機的主機名如果不一致的話就會報錯,這里做實驗之所以沒有報錯是因為正解反解和主機配置是一樣的,
    如果不一樣的話可以把這個指令啟動起來然后隨便給它一個字符串名稱就行了.

一般而言在生產環境中使用時網頁文件很有可能并不會放在/var/www/html/目錄,而是自己規劃的一個專用位置.這時就要修改DocumentRoot即可.http2.4對于每一個由url映射到的路徑有一個基本要求,必須要做明確授權用戶訪問,否則默認都不允許訪問.授權方式有兩種;可以基于url進行,也可以基于文件系統的路徑進行.

站點文檔訪問授權及眾多服務特性的配置:
基于文件系統路徑:
    定義一個文件的訪問授權
    <Directory "/PATH/TO/DIR">
    </Directory>
=================================                   
    <File "">
    </File>
基于URL進行:
    <Location "URL">
        ...
    </Location>
====================================                
    <LocationMatch ~ "URL_PATTERN">
        ...
    </LocationMatch>

示例:

httpd]# vim conf/httpd.conf 打開配置文件,修改DocumentRoot 文件為/web/htdocs,并且授權url映射到的路徑,否則無法訪問

http協議(2.2&2.4)RPM搭建配置

]# mkdir /web/htdocs -pv 創建目錄
httpd]# vim /web/htdocs/index.html 創建網站主頁,寫入以下信息
    /web/htdocs/index.html
使用瀏覽器訪問進行測試

http協議(2.2&2.4)RPM搭建配置

(3) Options:定義頁面資源的服務方式
所有可用值Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
    Indexes:默認啟用,指明URL路徑下不存在與定義的主頁面資源相符文件時,返回索引列表給用戶,危險
    Includes:允許啟動服務器包含
    FollowSymLinks: 允許跟蹤符號鏈接文件所指向的源文件;
    SymLinksifOwnerMatch:允許跟蹤符號鏈接文件,但是原文件的和連接文件的屬主屬組相同
    ExecCGI:允許執行CGI腳本
    MultiViews:允許做內容協商,十分消耗資源且不安全
    None:全部不可以
    All:全部可以訪問
重點說明;
    None:如果哪個選項都不啟用就使用此值
    All:如果所有選項都啟用就使用此值
    Indexes:索引;用戶訪問某個目錄時沒給定要訪問哪個文件,如果網站沒有主頁的話就會顯示出網站的所有文件的列表讓用戶選擇,
    如果這是一個動態網站的話,用戶看到的就是網站程序的源碼文件.再如果此目錄下放了一個數據庫的話,就有可能被人偷走,所以說這是很危險的,除非你要提供一個下載點,
    否則堅決不要使用Indexes
    FollowSymLinks:允許跟蹤符號鏈接:比如在DocumentRoot映射的目錄下有一個連接文件是指向/etc/fstab的,那么如果用戶訪問這個連接文件的時候就會訪問到/etc/fstab,這是一種潛在性的風險.建議禁止
    ExecCGI:允許執行CGI腳本:
(4) AllowOverride:是否允許覆蓋
httpd的訪問控制配置,允許每目錄單獨進行;在每個目錄下建立一個.htaccess文件;
AllowOverride表示是否允許目錄中的.htaccess文件中的配置來覆蓋當前配置段中的配置; 使用該配置會使站點十分消耗資源,對目錄解析的性能影響十分大,一般不使用              
可用取值:Options FileInfo AuthConfig Limit
        All:全部允許
        None :全部不允許
(5) 基于源地址的訪問控制
允許所有地址訪問:Require all granted
拒絕所有地址訪問:Require all denied
如果我們要打算做一個白名單或者黑名單,我們需要加上一個RequireAll的容器;在里邊進行定義;比如先開放或決絕一些,然后再開放或拒絕所有.實施格式如下;基于IP或基于主機名進行控制
    <RequireAll>

    </RequireAll>
    基于IP控制:
        Require ip ADDRESS : 允許這個ip訪問
        Require not ip ADDRESS : 拒絕這個ip訪問
            ADDRESS: 兩種使用方式
                ip:可以是單個IP
                network:也可以是網絡地址,網絡地址的表示方式可以有多種,如下;
                    10.1.0.0/255.255.0.0
                    10.1.0.0/16
                    10.1

    基于主機名控制:和基于ip控制區別不大 只是把ip換成了host
        Require host HOSTNAME : 
        Require not host HOSTNAME
            HOSTNAME:兩種表示方式,如下;
                FQDN:完整主機名
                DOMAIN.TLD:域名

示例: 基于ip地址控制拒絕10.1.250.14訪問(物理機ip)

httpd]# vim conf/httpd.conf 對要拒絕訪問的目錄配置段進行配置

http協議(2.2&2.4)RPM搭建配置

httpd]# httpd -t 檢測語法
httpd]# systemctl reload httpd.service 重載配置文件
使用物理機瀏覽器進行測試

http協議(2.2&2.4)RPM搭建配置

使用另外一臺VM虛擬機進行測試

http協議(2.2&2.4)RPM搭建配置

恢復允許所有主機訪問 只需要刪掉Require not ip ADDREES一行就可以了

6)User/Group:進程的運行者身份;

我們都知道httpd進程的運行者的身份是apache,這是因為http配置文件中定義了的 http協議(2.2&2.4)RPM搭建配置

7)定義路徑別名
Alias  /URL/  /PATH/TO/SOME_DIR/

示例:

]# mkdir /data/bbs -pv 創建別名指向的路徑
]# vim /data/bbs/index.html 編輯別名頁面內容
    <h1> BBS </h1>
]# vim conf/httpd.conf 編輯httpd配置文件,在別名模塊區域加入以下信息
     Alias /forum/ /data/bbs/
    <Directory "/data/bbs">
        Options None
        AllowOverride None
        Require all granted
    </Directory>

并且加入以下服務名
    ServerName localhost:80
]# httpd -t 檢查語法錯誤
]# systemctl reload httpd.service 重載配置文件
在瀏覽器訪問測試

http協議(2.2&2.4)RPM搭建配置

8)httpd-manual httpd的本地官方文檔
]# yum -y install httpd-manual 安裝文檔包
        ]# systemctl reload httpd.service 重載配置文件
        瀏覽器打開測試

http協議(2.2&2.4)RPM搭建配置

配置文件:conf.d/manual.conf         
        http://host/manual/
9)status page
]# httpd -M 先查看status 模塊是否被裝載,如果這個模塊被裝載了,那么status頁面內置的功能就存在,就可以自己定義一個路徑別名來向外輸出
    status_module (shared)
httpd]# vim conf.d/status.conf 創建一個配置文件
    <Location /status>
        SetHandler server-status
        Require all granted
    </Location>
httpd]# httpd -t 檢測語法錯誤
httpd]# systemctl reload httpd.service 重載配置文件
瀏覽器測試

http協議(2.2&2.4)RPM搭建配置

10)日志設定
/var/log/http/
   access.log:訪問日志,其需要記錄的內容需要自定義
   error.log

錯誤日志:

ErrorLog :錯誤日志 "/var/log/httpd/error_log"
LogLevel warn :日志級別,指定日志級別為warn,那么別warn級別更高的日志都會被記錄的

Possible values include: debug, info, notice, warn, error, crit, alert, emerg.

訪問日志:

定義訪問日志時需要在配置文件中寫入Customlog 還要跟上日志文件,格式如下;

LogFormat "FORMAT_STRINGS" LOG_FORMAT_NAME 
CustomLog  "/PATH/TO/LOG_FILE"  LOG_FORMAT_NAME 
LogFormat定義日志格式
    "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\""
    %h:客戶端地址
    %l:遠程的登錄名,通常為-
    %u:認證時的遠程用戶名,通常為-
    %t:接收到的請求時的時間,為標準英文格式時間+時區
    \" :轉義,顯示""
    %r:請求報文的起始行
    %>s:響應狀態碼,
    %b:以字節響應報文的長度,不包含http報文
    %{Header_Name}i:記錄指定請求報文首部的內容(value)
    %u:請求的URL

http協議(2.2&2.4)RPM搭建配置

11)虛擬主機

虛擬主機通常是指在真主機上虛擬出來的主機,從本質上來講虛擬主機就是本來一臺物理服務器只能提供一個站點,但是我們卻能夠擴展他用于提供多個站點,這其中的多個站點跟物理服務是沒有一一對應關系的,因此被稱為虛擬主機.這么做的原因是,一個網站一天的點擊量很小,如果用一臺專門的物理服務器的話,成本太高.所以就要用到虛擬主機的方式來進行.每一個主機的定義主要來于兩個方面的資源,ServerName和DocumentRoot,所以只需要從這兩方面來定義虛擬主機就可以了.

客戶端訪問網站時通常是通過主機名,端口,url來訪問的,那么只有一臺物理主機的情況下用戶訪問的時候怎么把其映射到不同的虛擬主機上去呢?url對一個主機是獨有的,所以難以區分,能夠區分的只有端口,主機名,IP.因此創建虛擬主機就有了三種區分不同虛擬主機的標識方式.

主機標識方式:
IP不同 
PORT不同
此兩種方法一般不使用,端口不同的話客戶端訪問不到了.ip不同的話,每一個ip地址的使用費是很高的,代價太大.
ServerName:通過host在請求報文首部當中傳過去使用的的主機名,成為FQDN.
http允許混合使用這三種方式.
定義虛擬主機的方法;
<VirtualHost IP:PORT>
    ServerName
    DocumentRoot
    <Directory "">
        ...
        Require all granted
    </DIrective>
    ErrorLog
    CustomLog
</VirtualHost>
注意:httpd-2.2中使用基于ServerName的虛擬主機時,要使用專用配置指令

NameVirtualHost IP:PORT

示例:基于ip+端口實現三個虛擬主機,使用/vhosts/www{1,2,3}分別對應三個虛擬主機

創建3個虛擬主機目錄,并且生成三個主頁
]# for i in {1..3};do mkdir -pv /vhosts/www$i; echo "www$i : site $i" > /vhosts/www$i/index.html; done

http協議(2.2&2.4)RPM搭建配置

httpd]# vim conf.d/vhost.conf 編輯虛擬主機配置文件

http協議(2.2&2.4)RPM搭建配置

通過瀏覽器訪問測試

http協議(2.2&2.4)RPM搭建配置

示例:基于ip+端口實現三個虛擬主機,要求端口一樣ip地址不一樣,混合使用.

]# ip a add 10.1.249.81/16 dev eno16777736 為網卡設備新增一個IP地址
]# ping 10.1.249.81 測試可ping通
httpd]# vim conf.d/vhost.conf 修改配置文件

http協議(2.2&2.4)RPM搭建配置

]# httpd -t 檢測語法
]# systemctl reload httpd.service 重載配置文件
在瀏覽器訪問測試

http協議(2.2&2.4)RPM搭建配置

示例:基于主機名實現三個虛擬主機,所有三個虛擬主機端口一致,*表示所有ip地址

httpd]# vim conf.d/vhost.conf 修改配置文件

http協議(2.2&2.4)RPM搭建配置

]# vim /etc/hosts 編輯hosts文件增加名稱解析項

http協議(2.2&2.4)RPM搭建配置

]# curl http://www1.ali.com 使用curl命令進行測試

http協議(2.2&2.4)RPM搭建配置

注意:使用基于主機名實現虛擬主機,如果使用的是http2.2,那么此處需要使用NameVirtualHost IP:PORT,這里的ip和端口和虛擬機使用的ip和端口要保持一致,可能還要注釋DocumentRoot 要注釋中心主機

示例:每一個虛擬主機還可以單獨使用訪問日志和錯誤日志

httpd]# vim conf.d/vhost.conf 修改配置文件

http協議(2.2&2.4)RPM搭建配置

]# httpd -t 檢測語法錯誤
]# systemctl reload httpd.service 重載配置文件
]# curl http://www1.ali.com 測試是否生效

http協議(2.2&2.4)RPM搭建配置

示例:在三個虛擬主機實現路徑別名/bbs,訪問其他文件系統路徑

]# vim conf.d/vhost.conf 修改配置文件

http協議(2.2&2.4)RPM搭建配置

]# httpd -t 檢測語法
]# systemctl reload httpd.service 重載配置文件
在瀏覽器測試

http協議(2.2&2.4)RPM搭建配置

示例:在第二個虛擬主機上提供/status

]# vim conf.d/vhost.conf 修改配置文件,增加status配置

http協議(2.2&2.4)RPM搭建配置

]# httpd -t 檢測語法
]# systemctl reload httpd.service 重載配置文件
在實體機hosts文件中增加域名解析 10.1.249.80 www2.ali.com

在瀏覽器測試

http協議(2.2&2.4)RPM搭建配置

12)基于用戶的訪問控制

Require user USERLIST

Require group GRPLIST

http的認證方式:

basic認證
digest認證

http協議認證過程:

認證質詢:服務器端收到認證請求以后,會發起認證質詢.
    相應給客戶端一個 WWW-Authencate 的首部:響應碼為401,拒絕客戶端請求,并說明用戶需要輸入正確的賬號和密碼之后方可訪問;

認證:客戶端收到質詢以后,需要進行提交認證
    提交時客戶端給服務端發送一個 Authorization 首部:客戶端填入賬號和密碼,再次發送請求報文;認證通過,服務器發送響應內容;

要想對一個目錄下的文件進行訪問控制的話,需要在目錄中進行如下定義;

<Directory "">
    Options None
    AllowOverride None
    AuthType Basic 定義認證方式
    AuthName "STRING" 定義認證名稱
    AuthUserFile "" 指明認證時所使用的用戶帳號,""用戶帳號文件的路徑是自己定義的,只要這個文件存在就行
    Require user USER1 USER2 ... 定義用戶帳號文件中允許登錄的用戶列表,Require valid-user表示允許用戶帳號文件中的所有用戶登錄
</Directory>

賬號文件生成工具htpasswd

htpasswd [options] "/PATH/TO/HT_PASSWD_FILE" username
    -c:創建此文件;
    -m:md5加密密碼存放;
    -s:sha加密
    -D: 刪除指定用戶

示例:為第三個虛擬主機的/admin進行用戶訪問認證

生成一個用戶帳號文件,用戶名為ali和ayisha
]# htpasswd -c -m /etc/httpd/conf/.htpasswd ali
]# htpasswd -m /etc/httpd/conf/.htpasswd ayisha

http協議(2.2&2.4)RPM搭建配置

為第三個虛擬主機創建一個網頁文件
]# mkdir /vhosts/www3/admin -pv 創建url
]# vim /vhosts/www3/admin/admin.html 創建主頁文件
    <h1>admin</h1>
定義授權配置文件
]# vim conf.d/vhost.conf

http協議(2.2&2.4)RPM搭建配置

]# httpd -t 檢測語法
]# systemctl reload httpd.service 重載配置文件
瀏覽器輸入url/admin/admin.html測試

http協議(2.2&2.4)RPM搭建配置

http協議(2.2&2.4)RPM搭建配置

Require的使用方式:

(1) Require valid-user 授權用戶帳號文件中所有合法用戶
(2) Require user USER1 USER2 ... 授權用戶帳號文件中指定合法用戶

基于組進行認證:

<Directory "/vhosts/www1/admin">
    Options None
    AllowOverride None
    AuthType Basic
    AuthName "Admin Area, Enter your name/pass"
    AuthUserFile "/etc/httpd/conf/.htpasswd"
    AuthGroupFile "/etc/httpd/conf/.htgroup"
    Require group GRPNAME1 GRPNAME 2
</Directory>

組賬號文件:組帳號文件使用VIM就可以定義,組中的用戶必須是用戶帳號文件中我們已經創建了的用戶 每行定義一個組 group_name: user1 user2 …

示例:組認證

創建兩個新用戶
]# htpasswd -m /etc/httpd/conf/.htpasswd lucy   
]# htpasswd -m /etc/httpd/conf/.htpasswd blair
httpd]# vim conf/.htgroup 編輯組文件,將兩個新用戶加入組中
    admins: lucy blair
httpd]# vim conf.d/vhost.conf 編輯配置文件

http協議(2.2&2.4)RPM搭建配置

]# httpd -t 檢測語法
]# systemctl reload httpd.service 重載配置文件
瀏覽器輸入url/admin/admin.html測試

http協議(2.2&2.4)RPM搭建配置

http協議(2.2&2.4)RPM搭建配置

13)curl命令

curl是基于URL語法在命令行方式下工作的文件傳輸工具,它支持FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE及LDAP等協議。curl支持HTTPS認證,并且支持HTTP的POST、PUT等方法, FTP上傳, kerberos認證,HTTP上傳,代理服務器, cookies, 用戶名/密碼認證, 下載文件斷點續傳,上載文件斷點續傳, http代理服務器管道( proxy tunneling), 甚至它還支持IPv6, socks5代理服務器,,通過http代理服務器上傳文件到FTP服務器等等,功能十分強大。

語法

curl  [options]  [URL...]

curl的常用選項:

    -A/--user-agent <string> 設置用戶代理發送給服務器
    --basic 使用HTTP基本認證

     -e/--referer <URL> 來源網址
    --cacert <file> CA證書 (SSL)
    --compressed 要求返回是壓縮的格式
    -H/--header <line>自定義首部信息傳遞給服務器
    -I/--head 只顯示響應報文首部信息
    --limit-rate <rate> 設置傳輸速度
    -u/--user <user[:password]>設置服務器的用戶和密碼
    -0/--http1.0 使用HTTP 1.0 
    -X, --request <command>:自定義請求方法

另一個工具:elinks

elinks  [OPTION]... [URL]...
    -dump: 不進入交互式模式,而直接將URL的內容輸出至標準輸出
14)使用mod_deflate模塊壓縮頁面優化傳輸速度

適用場景:

(1) 節約帶寬,額外消耗CPU;同時,可能有些較老瀏覽器不支持;

(2) 壓縮適于壓縮的資源,例如文件文件;

設置壓縮文件過濾器
SetOutputFilter DEFLATE

# mod_deflate configuration

# Restrict compression to these MIME types
AddOutputFilterByType DEFLATE text/plain :純文本文件
AddOutputFilterByType DEFLATE text/html :html文檔
AddOutputFilterByType DEFLATE application/xhtml+xml :擴展的html和xml混合的文檔
AddOutputFilterByType DEFLATE text/xml :xml文件
AddOutputFilterByType DEFLATE application/xml :輸入applocation的xml文件
AddOutputFilterByType DEFLATE application/x-javascript :js代碼
AddOutputFilterByType DEFLATE text/javascript 屬于js的文本文件
AddOutputFilterByType DEFLATE text/css :css文件

# Level of compression (Highest 9 - Lowest 1)
DeflateCompressionLevel 9 :壓縮比是9 9是最高壓縮比

# Netscape 4.x has some problems.
BrowserMatch ^Mozilla/4  gzip-only-text/html :對 Netscape 4.x的瀏覽器,只用gzip-only-text/html進行壓縮

# Netscape 4.06-4.08 have some more problems
BrowserMatch  ^Mozilla/4\.0[678]  no-gzip :Netscape 4.06-4.08的瀏覽器不兼容gzip,所有禁止掉

# MSIE masquerades as Netscape, but it is fine
BrowserMatch \bMSI[E]  !no-gzip !gzip-only-text/html :MSIE不支持no-gzip,gzip-only-text.所以進行取反

示例:

]# httpd -M |grep deflate 確認模塊已經被裝載
]# cp /var/log/messages /var/www/html/messages.txt 復制一個比較大的文件作為實驗環境
]# chmod +r /var/www/html/messages.txt 為此文件的所有用戶加上讀權限
]# curl -I http://10.1.249.80/messages.txt 測試可訪問到此文件

http協議(2.2&2.4)RPM搭建配置

]# curl --compressed -I http://10.1.249.80/messages.txt 使用crul命令要求返回壓縮格式數據,返回結果中并沒有顯示所支持的壓縮格式
這里需要設置輸出過濾器(SETOutputFilter DEFLATE),把僅適合壓縮的文件歸類到過濾器里,并對過濾器過濾下來的文件執行壓縮,被過濾器漏掉的就不壓縮了.
]# vim /etc/httpd/conf.d/deflate.conf 編輯過濾其配置文件

http協議(2.2&2.4)RPM搭建配置

]# httpd -t 檢測語法
]# systemctl reload httpd.service 重載配置文件
]# curl -I http://10.1.249.80/messages.txt 再次使用curl測試

http協議(2.2&2.4)RPM搭建配置

]# curl --compressed -I http://10.1.249.80/messages.txt 再次要求返回壓縮格式測試

http協議(2.2&2.4)RPM搭建配置

15)https, http over ssl

SSL會話的簡化過程

(1) 客戶端發送可供選擇的加密方式,并向服務器請求證書;

(2) 服務器端發送證書以及選定的加密方式給客戶端;

(3) 客戶端取得證書并進行證書驗正:

如果信任給其發證書的CA:
(a) 驗正證書來源的合法性;用CA的公鑰解密證書上數字簽名;
(b) 驗正證書的內容的合法性:完整性驗正
(c) 檢查證書的有效期限;
(d) 檢查證書是否被吊銷;
(e) 證書中擁有者的名字,與訪問的目標主機要一致;

(4) 客戶端生成臨時會話密鑰(對稱密鑰),并使用服務器端的公鑰加密此數據發送給服務器,完成密鑰交換;

(5) 服務用此密鑰加密用戶請求的資源,響應給客戶端;

注意:SSL會話是基于IP地址創建;所以單IP的主機上,僅可以使用一個https虛擬主機;
配置httpd支持https:

(1) 為服務器申請數字證書;

測試:通過私建CA發證書
    (a) 創建私有CA
    (b) 在服務器創建證書簽署請求
    (c) CA簽證

(2) 配置httpd支持使用ssl,及使用的證書;

# yum -y install mod_ssl

配置文件:/etc/httpd/conf.d/ssl.conf
        DocumentRoot
        ServerName
        SSLCertificateFile
        SSLCertificateKeyFile

(3) 測試基于https訪問相應的主機;

# openssl  s_client  [-connect host:port] [-cert filename] [-CApath directory] [-CAfile filename]

示例:配置https

創建一個CA

http協議(2.2&2.4)RPM搭建配置

自簽CA證書

http協議(2.2&2.4)RPM搭建配置

CA]# echo 01 > serial   echo一個證書編號
CA]# touch index.txt touch一個數據庫文件
CA]# cd /etc/httpd/ 進入/etc/http目錄
httpd]# mkdir certs 創建一個certs目錄
在/etc/httpd/certs目錄下創建一個用于httpd通信時用到的私鑰

http協議(2.2&2.4)RPM搭建配置

利于此私鑰創建簽署請求

http協議(2.2&2.4)RPM搭建配置

簽署CA,這里處于測試目的在一臺機器上簽署,是實際應用環境當中需要將CA簽署請求傳送給CA機構

http協議(2.2&2.4)RPM搭建配置

]# yum install mod_ssl -y 安裝httpd的ssl模塊
[root@localhost certs]# rpm -ql mod_ssl 
/etc/httpd/conf.d/ssl.conf :配置ssl虛擬主機的文件
/etc/httpd/conf.modules.d/00-ssl.conf :載入模塊的文件 
/usr/lib64/httpd/modules/mod_ssl.so :ssl模塊
/usr/libexec/httpd-ssl-pass-dialog
/var/cache/httpd/ssl
配置ssl虛擬主機

http協議(2.2&2.4)RPM搭建配置

http協議(2.2&2.4)RPM搭建配置

]# httpd -t 檢測語法錯誤
]# systemctl reload httpd.service 重載配置文件
將CA自簽證書和http證書導入瀏覽器 然后進行訪問測試

http協議(2.2&2.4)RPM搭建配置

http協議(2.2&2.4)RPM搭建配置

16)httpd自帶的應用程序

htpasswd:basic認證基于文件實現,用于生成賬號和密碼的程序;把用戶的帳號密碼放在服務器端的一個文本文件中

1.htdbm:與htpasswd不同用于實現把用戶的帳號做哈希編碼,放在一個db庫中.

2.htdigest

3.apachectl:httpd自帶的服務控制腳本,支持start和stop等子命令;

4.apxs:- APache eXtenSion tool apache的擴展工具
用于實現為httpd增添模塊的:在需要將第三方模塊或者是httpd官方的某一些沒有編譯的模塊單獨編譯時必須指明apxs的路徑才可以完成掛接的. 

5.apxs功能的實現是由程序包httpd-devel提供的  

6.rotatelogs:日志滾動工具
    access_log, 
    access_log, access_log.1, ...

7.ab: - Apache HTTP server benchmarking tool 性能壓測工具
通常只能對一個資源進行壓測請求做簡單評估
    webbench, httpload, ...             
    loadrunner, jmeter (ASF)                
    tcpcopy:網易研發的開源產品,工作特性是復制線上的流量,然后把復制的流量保存在一個文件中,做壓測的時候使用此文件進行
17)ab – web service的壓力測試工具
ab [OPTIONS]  [http[s]://]hostname[:port]/path
    請求數:[ -n requests ]
    并發數:[ -c concurrency ]
    長連接:[ -k ]
示例:
]# ab -n 1000 -c 1 http://10.1.249.80/messages.txt

http協議(2.2&2.4)RPM搭建配置

httpd-2.2與httpd-2.4的不同之處:

MPM:多道處理模塊

prefork:進程模型,兩級結構,master/worker, 每worker處理一個請求;
worker:線程模型,三級結構,master/worker/thread,每thread處理一個請求;
event:事件驅動的線程模型,兩級結構,master/worker,每worker響應多個請求;

httpd-2.2的MPM模塊為static模塊,而非shared模塊;
要想切換mpm模塊需要去編輯/etc/sysconfig/httpd當中的HTTPD變量的值;如下
HTTPD=/usr/sbin/{httpd|httpd.worker|httpd.event}

http2.2上默認對于不同的mpm的配置參數:/etc/http/conf/httpd.conf                        
    <IfModule prefork.c>
    StartServers       8 :默認啟動的進程數
    MinSpareServers    5 :最少空閑進程
    MaxSpareServers   20 :最大空閑進程
    ServerLimit      256 :服務器上啟動的進程的上限
    MaxClients       256 :最大連接數
    MaxRequestsPerChild  4000 :每進程所能夠承受的最大請求數
    </IfModule>         

    <IfModule worker.c>
    StartServers         4 :默認啟動的進程數
    MaxClients         300 :
    MinSpareThreads     25 :最小空閑線程數
    MaxSpareThreads     75 :最大空閑線程數
    ThreadsPerChild     25 :每子進程啟動的線程數量
    MaxRequestsPerChild  0 :
    </IfModule>

基于IP的訪問控制機制:

httpd-2.4:
    require ip, require not ip, require host, require not host

httpd-2.2:
    allow from, deny from

    order allow,deny:白名單 
    order deny,allow:黑名單

示例:拒絕10.1.249.68來訪問的配置

]# vim /etc/httpd/conf/httpd.conf 編輯配置文件

http協議(2.2&2.4)RPM搭建配置

]# service httpd reload 重讀配置文件
]# crul http://172.18.19.34 在10.1.249.80主機上進行進行訪問測試

基于主機名的虛擬主機:

httpd-2.2:須使用NameVirtualHost;
httpd-2.4:無須使用;

各映射的本地文件系統路徑內的資源:

httpd-2.4:須做顯式授權
httpd-2.2:無須顯式授權

示例:創建兩個虛擬主機

]# mkdir -pv /vhosts/www{1,2} 創建兩個虛擬主機目錄
]# vim /vhosts/www1/index.html 編輯虛擬主機1的主頁
]# vim /vhosts/www2/index.html 編輯虛擬主機2的主頁
]# ]# vim /etc/httpd/conf/httpd.conf 注釋掉中心主機的DocumentRoot
]# vim /etc/httpd/conf.d/vhosts.conf 編輯虛擬主機配置文件
]# httpd -t 檢測語法錯誤
]# service httpd reload 重載配置文件
添加物理機hosts域名解析
瀏覽器測試虛擬主機

http協議(2.2&2.4)RPM搭建配置

http協議(2.2&2.4)RPM搭建配置

原創文章,作者:M20-1馬星,如若轉載,請注明出處:http://www.www58058.com/52445

(0)
M20-1馬星M20-1馬星
上一篇 2016-10-17
下一篇 2016-10-17

相關推薦

  • nfs和samba服務

    nfs:      nfs: Network File System                      #網絡文件系統      nis:Network Information Se…

    Linux干貨 2017-04-27
  • suid, sgid, sticky簡介

    SUID屬性 passwd命令可以用于更改用戶的密碼,一般用戶可以使用這個命令修改自己的密碼。但是保存用戶密碼的/etc/shadow文件的權限是000,也就是說只有文件的所有者root用戶可以寫入,那為什么其他用戶也可以修改自己的密碼呢?這就是由于Linux的文件系統中的文件有SUID屬性。 [root@centos6 ~]# ll /etc/shadow…

    Linux干貨 2017-07-27
  • Linux基礎知識之軟硬鏈接

    系統環境:    該博文以CentOS6.8_x86_64系統為基礎,Xshell5遠程登錄CentOS6.8系統,以root身份登錄系統。 為什么要學習符號(軟)鏈接和硬鏈接?    符號(軟)鏈接和硬鏈接是Linux文件系統中的一個重要的概念,軟硬鏈接的學習過程中會涉及一些文件系統中的索引節點(inode),索引節…

    Linux干貨 2016-08-02
  • DNS和BIND配置(第一部分)

    一、知識整理 1、最初只有七個一級域名:Top Level Domain:tld:com、edu、mil、gov、net、org、int;     一級域名分三類:組織域、國家域、反向域。最多127級域名;全球有13個根節點服務器。 2、一次完整的查詢請求經過的流程:client—hosts文件&#8212…

    Linux干貨 2016-10-17
  • 詳解Linux下用戶和組的配置文件

    本文將介紹Linux下用戶和組的概念及相關配置文件,通過本文,能更好的認識/etc/pssswd ,/etc/group,以及UID、GID的概念,最后將通過修改用戶配置文件來實現用戶和組的管理工作,對Linux的多任務、多用戶有一個更清楚的認識。 一、用戶(USER) 在LInux上用戶的管理工作是通過修改相關的配置文件來實現的,在日常的工作中主要包含對用…

    Linux干貨 2016-10-23
  • bash的基本特性之globbing,IO重定向及管道

    bash的基本特性之globbing,IO重定向及管道 giobbing:文件名通配 在bash的操作環境中有一個分廠有用的功能那就是gilobbing:文件名通配,這樣我們在處理數據的時候就更方便了。下面我們來羅列一些常用的通配符。(注:globbing是做整體的文件名匹配而非部分) 匹配模式:元字符 *:表示匹配任意長度的任意字符  &nbsp…

    Linux干貨 2016-12-19
欧美性久久久久