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: 為路徑時,取決于文件系統;
主配置文件概述
### 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
]# systemctl reload httpd.service 重載配置文件 ]# ss -tnl 查看端口是否已經處于監聽狀態
在瀏覽器訪問各個端口可訪問
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 重載配置文件 瀏覽器訪問查看請求報文持久連接生效
再次編輯保持連接配置文件關閉此功能,使用瀏覽器查看到服務器端響應報文顯示此功能處于關閉狀態,而對于客戶端的請求報文則顯示keepa-live, 此意表示盡可能的保持連接,客戶端請求時當然以能夠保持連接為最好,因為傳輸效率高.但是服務器端不支持所以只能close,所有請求和響應要看雙方是否共同支持
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配置文件可以看到有一大堆模塊,如果某個功能不想用了,只需要將其注釋掉即可.
注意:有些功能可能會被其他模塊所依賴
示例:
]# 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 …
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映射到的路徑,否則無法訪問
]# mkdir /web/htdocs -pv 創建目錄 httpd]# vim /web/htdocs/index.html 創建網站主頁,寫入以下信息 /web/htdocs/index.html 使用瀏覽器訪問進行測試
(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 對要拒絕訪問的目錄配置段進行配置
httpd]# httpd -t 檢測語法 httpd]# systemctl reload httpd.service 重載配置文件 使用物理機瀏覽器進行測試
使用另外一臺VM虛擬機進行測試
恢復允許所有主機訪問 只需要刪掉Require not ip ADDREES一行就可以了
6)User/Group:進程的運行者身份;
我們都知道httpd進程的運行者的身份是apache,這是因為http配置文件中定義了的
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 重載配置文件 在瀏覽器訪問測試
8)httpd-manual httpd的本地官方文檔
]# yum -y install httpd-manual 安裝文檔包 ]# systemctl reload httpd.service 重載配置文件 瀏覽器打開測試
配置文件: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 重載配置文件 瀏覽器測試
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
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
httpd]# vim conf.d/vhost.conf 編輯虛擬主機配置文件
通過瀏覽器訪問測試
示例:基于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 修改配置文件
]# httpd -t 檢測語法 ]# systemctl reload httpd.service 重載配置文件 在瀏覽器訪問測試
示例:基于主機名實現三個虛擬主機,所有三個虛擬主機端口一致,*表示所有ip地址
httpd]# vim conf.d/vhost.conf 修改配置文件
]# vim /etc/hosts 編輯hosts文件增加名稱解析項
]# curl http://www1.ali.com 使用curl命令進行測試
注意:使用基于主機名實現虛擬主機,如果使用的是http2.2,那么此處需要使用NameVirtualHost IP:PORT,這里的ip和端口和虛擬機使用的ip和端口要保持一致,可能還要注釋DocumentRoot 要注釋中心主機
示例:每一個虛擬主機還可以單獨使用訪問日志和錯誤日志
httpd]# vim conf.d/vhost.conf 修改配置文件
]# httpd -t 檢測語法錯誤 ]# systemctl reload httpd.service 重載配置文件 ]# curl http://www1.ali.com 測試是否生效
示例:在三個虛擬主機實現路徑別名/bbs,訪問其他文件系統路徑
]# vim conf.d/vhost.conf 修改配置文件
]# httpd -t 檢測語法 ]# systemctl reload httpd.service 重載配置文件 在瀏覽器測試
示例:在第二個虛擬主機上提供/status
]# vim conf.d/vhost.conf 修改配置文件,增加status配置
]# httpd -t 檢測語法 ]# systemctl reload httpd.service 重載配置文件 在實體機hosts文件中增加域名解析 10.1.249.80 www2.ali.com 在瀏覽器測試
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
為第三個虛擬主機創建一個網頁文件 ]# mkdir /vhosts/www3/admin -pv 創建url ]# vim /vhosts/www3/admin/admin.html 創建主頁文件 <h1>admin</h1> 定義授權配置文件 ]# vim conf.d/vhost.conf
]# httpd -t 檢測語法 ]# systemctl reload httpd.service 重載配置文件 瀏覽器輸入url/admin/admin.html測試
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 編輯配置文件
]# httpd -t 檢測語法 ]# systemctl reload httpd.service 重載配置文件 瀏覽器輸入url/admin/admin.html測試
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 測試可訪問到此文件
]# curl --compressed -I http://10.1.249.80/messages.txt 使用crul命令要求返回壓縮格式數據,返回結果中并沒有顯示所支持的壓縮格式
這里需要設置輸出過濾器(SETOutputFilter DEFLATE),把僅適合壓縮的文件歸類到過濾器里,并對過濾器過濾下來的文件執行壓縮,被過濾器漏掉的就不壓縮了.
]# vim /etc/httpd/conf.d/deflate.conf 編輯過濾其配置文件
]# httpd -t 檢測語法 ]# systemctl reload httpd.service 重載配置文件 ]# curl -I http://10.1.249.80/messages.txt 再次使用curl測試
]# curl --compressed -I http://10.1.249.80/messages.txt 再次要求返回壓縮格式測試
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
自簽CA證書
CA]# echo 01 > serial echo一個證書編號 CA]# touch index.txt touch一個數據庫文件 CA]# cd /etc/httpd/ 進入/etc/http目錄 httpd]# mkdir certs 創建一個certs目錄 在/etc/httpd/certs目錄下創建一個用于httpd通信時用到的私鑰
利于此私鑰創建簽署請求
簽署CA,這里處于測試目的在一臺機器上簽署,是實際應用環境當中需要將CA簽署請求傳送給CA機構
]# 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虛擬主機
]# httpd -t 檢測語法錯誤 ]# systemctl reload httpd.service 重載配置文件 將CA自簽證書和http證書導入瀏覽器 然后進行訪問測試
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
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 編輯配置文件
]# 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域名解析 瀏覽器測試虛擬主機
原創文章,作者:M20-1馬星,如若轉載,請注明出處:http://www.www58058.com/52445