httpd-2.2基礎配置
回顧:
MPM機制:多路處理子產品,有以下三種類型
prefork:多程序模型,一個程序響應一個請求
worker:多程序多線程模型,一個程序生成多個線程,一個線程響應一個請求
event:事件驅動模型,異步,回調方式響應使用者請求,一個程序響應多個請求
并發伺服器響應使用者請求:
單程序IO模型
多程序IO模型
複用的IO模型:多線程模型,事件驅動
複用的多程序IO模型
新内容
配置服務過程中
關閉selinux
關閉iptables
httpd安裝使用(2)
centos6的rpm包是2.2(event測試版)
centos7的rpm包是2.4(event可生産使用)
安裝方式:CD光牒的rpm包,編譯安裝(經過編譯後的rpm包的功能未必符合需要)
程式生成的檔案環境
rpm -ql httpd 程式的全部檔案
rpm -qc httpd 程式的配置檔案
/etc/httpd/是httpd程式運作的根目錄
rpm -qd httpd 網頁文檔
centos6上httpd程式環境
配置檔案:
/etc/httpd/conf/httpd.conf
/etc/httpd/conf.d/*.conf
服務腳本:
/etc/rc.d/init.d/httpd
腳本配置檔案:/etc/sysconfig/httpd
主程式檔案:rpm -ql httpd | grep bin
/usr/sbin/{httpd,httpd.event,httpd.worker}
httpd=httpd.prefork,預設,可在/etc/sysconfig/httpd檔案中切換
日志檔案目錄:/var/log/httpd/,日志檔案有兩類
access_log:通路日志,可以導入到大資料處理平台中做實時系統分析,分析使用者的行為
error_log:啟動、停止的錯誤資訊或者運作過程的錯誤、警告資訊
站點文檔目錄:存放網頁的目錄,向外輸出提供通路的
預設:/var/www/html/
配置檔案組成部分詳解:
grep -i "Session" /etc/http/conf/httpd.conf
配置格式:配置指令 值
配置指令:不區分大小寫
值:為路徑時,取決于檔案系統
/etc/httpd/conf/httpd.conf配置檔案有三部分:
1、全局配置
①指明監聽端口和IP
Listen [IP:]80 省略IP表示監聽所有IP的80端口,Listen指令可以出現多次,可以Listen 80 8080這樣子寫嗎?
Listen 1.2.3.4:8080 修改監聽端口隻能restart??貌似reload也可以
②持久連接配接和非持久連接配接
連接配接建立後,第一個資源擷取完成後不會斷開連接配接而是繼續等待其他的請求完成。
連結建立後應該何時斷開?這是一個非常重要的問題——控制标準有兩種,數量限制(預設擷取100個資源就會斷開)和時間限制
副作用:對并發通路量較大的伺服器,持久連接配接功能或使得有些請求得不到響應
關閉持久連結會增加網絡帶寬的壓力
折中方案:使用較短的持久連接配接時間,比如5S。httpd2.4支援毫秒級持久時間
非持久連接配接,httpd1.0預設是非持久的,httpd1.1預設是持久連接配接
持久連接配接的相關配置項及預設值如下
KeepAlive Off
MaxKeepAliveRequests 100 預設請求100個資源就會斷開
KeepAliveTimeout 15 連接配接逾時斷開時長15秒
telnet IP PORT 明文的文本格式都可以telnet
GET / HTTP/1.1 指明請求資源
Host: IP 指明伺服器IP
[enter]
文本傳輸完成後,立刻斷開,因為預設是短連結。現在修改配置為長連接配接
KeepAlive On
reload服務
GET / HTTP/1.1 指明請求資源(/index.html)和協定
Host: IP/HOSTNAME 指明伺服器IP
此時連接配接不斷開,但逾時會斷開
③MPM,multipath process module
配置多道處理子產品,其實有十幾種,httpd上有3種prefork,worker,event
httpd-2.2不支援同時編譯多個子產品,編譯時隻能標明一個;但rpm安裝時提供了三種二進制程式檔案,分别用于實作對不同MPM機制的支援;而httpd-2.4則可以同時編譯三種處理子產品,可以在運作時切換。
檢視使用MPM哪種模式
httpd-2.2檢視方式
ps aux | grep httpd,如果使用/usr/sbin/httpd則表示使用了prefork,httpd.worker,httpd.event則代表另外兩種模式
檢視子產品清單
httpd -h
httpd -l 檢視靜态編譯的子產品,這些功能子產品在啟動httpd時就會一定會啟用。
core.c 核心子產品
prefork.c prefork子產品
http_core.c http的功能子產品
mod_so.c 支援子產品裝解除安裝的接口
httpd -M 還有另外一部分的子產品是動态裝解除安裝的,此指令檢視靜态編譯和動态裝解除安裝的子產品。
===
更換httpd程式
把httpd-->httpd.worker
vim /etc/sysconfig/httpd編輯此檔案
啟用HTTPD=/usr/sbin/httpd.worker
(HTTPD=/usr/sbin/httpd.event)
此時更換為httpd.worker了
(備注:httpd.event在httpd-2.2中是測試使用的)
然後重新開機服務
ps aux | grep httpd
可以檢視到使用httpd.worker/httpd.event
httpd.worker -l
httpd.event -l
httpd和httpd.worker在/etc/http/conf/httpd.conf檔案中均有相關的配置項
<IfModule prefork.c> 如果加載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 最大空閑程序數
ThreadPerChild 25 每個程序允許啟動的線程數
MaxRequestsPerChild 0 每個工作程序服務的最大請求數,0表示無限制
上述配置會導緻程序啟動是4個工作程序,然後有一個程序會被殺死
worker并發請求300*25=7500
每個請求處理需要1s
一分鐘可以處理7500*60=450000次連接配接
一個小時可以處理450000*60=27000000次連接配接
每天高峰通路8個小時27000000*8=216000000次連接配接
每個頁面平均需要100次連接配接處理
那麼每天PV就是216000000/100=2160000=216萬
④DSO機制:動态裝解除安裝子產品
httpd安裝時把子產品都安裝在此路徑下:/usr/lib64/httpd/modules/*.so
配置指令實作子產品加載
LoadModule <mod_name> <mod_path>
子產品路徑可以相對路徑,相對于ServerRoot(/etc/httpd/),該目錄下有連結檔案modules指向/usr/lib64/httpd/modules/。不過建議使用絕對路徑
httpd -M可以檢視已經裝在的所有子產品
/etc/http/conf/httpd.conf檔案中有衆多LoadModule指令指明加載了哪些子產品,将其注釋則表示不加載此子產品
reload重載服務生效
⑤定義主伺服器main server文檔頁面路徑
隻提供一個網站服務
文檔路徑映射:
DocumentRoot指向的路徑為URL路徑的起始位置
DocumentRoot "/var/www/html/"
http://HOST:PORT/test/index.html --> /var/www/html/test/index.html
mkdir -p /www/htdocs/
vim /www/htdocs/index.html
修改/etc/http/conf/httpd.conf檔案中DocumentRoot指明的路徑為
DocumentRoot "/www/htdocs/"
修改完成後,重載服務reload
修改DocumentRoot後還需要修改站點通路控制以授權使用者通路新目錄,在httpd-2.4上要求如此。在httpd-2.2上則無需修改。
<Directory "/var/www/html">
⑥站點通路控制
可基于兩種類型的路徑指明對哪些資源進行通路控制
a.檔案系統路徑:
<Directory ""></Directory>
<File ""></File> 對單個檔案控制
<FileMatch ""></FileMatch> 檔案正規表達式,盡量不使用,因為比對檔案比較耗費系統資源?
b.URL路徑:
<Location ""></Location>
<LocationMatch ""></LocationMatch>
通路控制機制:
基于來源位址,ip容易僞裝
基于賬号
⑦在Directory中基于來源位址實作通路控制
<Directory "/var/www/html/">
Options Indexes FollowSymLinks
使用者對該目錄的通路屬性,具體的屬性值在Options文檔上面的注釋内容中,例如Indexes FollowSymLinks等等
Indexes:索引,當使用者通路站點沒有指明指定頁面檔案時傳回的頁面,預設頁面在DirectoryIndex指令中指明。DirectoryIndex可以指定的多個預設頁面則會從左到右查找。而如果都沒有的話,則會傳回目錄下的所有檔案,也就把整個網站源碼暴露給别人了,這是非常危險的。除非在下載下傳網站中可以使用。
測試時,修改<Directory "">的指向為DocumentRoot,需要移除welcome.conf和index.html檔案,才能看到indexes的網頁檔案清單效果
-Indexes表示不啟用該項
FollowSymLinks:當DocumentRoot含有連結檔案且被通路時,是否允許通路連結指向檔案,這是危險的!不建議使用
有一個相似的選項SymLinksifOwnerMatch,如果連結檔案的屬主和目标檔案屬主是同一個則允許?
ExecCGI是否允許執行CGI腳本
MultiViews多視圖,顯示中文?性能差有風險
Includes?
測試時使用All,生産環境時使用None
AllowOverride None
是否允許此處定義的通路規則去覆寫<Directory "">指明目錄的所有字母下的.htaccess,None表示不覆寫
httpd-2.2支援每目錄通路控制,隻需在目錄下建立.htaccess即可
基于位址來源的通路控制機制
Order allow,deny
表示檢查次序,先檢查deny指令後檢查allow指令;Order deny,allow則表示先檢查allow,後檢查deny。
Allow from all,from後面
具體IP
網段 1.2
1.2.0.0
1.2.0.0/16
1.2.0.0/255.255.0.0
配置示例
Deny from 1.2.3.4
Allow from 1.2
elinks -dump http://IP/test.html
</Directory>
2、主服務配置(隻提供一個站點,和③沖突,不能同時啟用)
3、虛拟主機(提供多個站點,和②沖突,不能同時啟用)
⑧日志功能的設定
httpd的日志主要有兩個——通路日志和錯誤日志,相關的配置指令詳解如下:
ErrorLog logs/error_log
這個相對路徑是相對于ServerRoot(/etc/httpd/)而言,其絕對路徑應該是/etc/httpd/logs/error_log,而/etc/httpd/logs/是指向/var/log/httpd/error_log?目錄的連結檔案
錯誤日志應該設定日志記錄級别,低于某個級别的日志不應該記錄,否則日志量會非常大且不必要。錯誤日志的級别有以下:
debug, info, notice, warn, error, crit, alert, emerg
級别的等級自左往右升高。debug, info, notice出于排錯的目的,否則不應該記錄的。預設是warn,那麼warn和比warn級别高的日志都應該記錄
LogLevel warn
通路日志
CustomLog logs/access_log combined
combined是一種日志格式,在某個LogFormat指令中進行定義了。是以,可以修改其預設的日志定義格式。
%h,%l,%u都是宏,會被替換為具體資訊
%h:用戶端ip
%l:登入使用者名,大多數為空,用-表示
%u:使用者認證時的使用者名,基于basic或digest的認證登入,-表示為空
%t:伺服器收到頁面請求時的時間
\":表示就是顯示"
%r:請求封包的首行資訊——請求方法,URL,協定版本
%>s:請求狀态碼,比如200,304,502
%b:響應封包的位元組數(不包含響應封包首部)
%{Referer}i:請求封包中"Referer"首部的值,表示,連結到此頁面的跳轉位址。-表示為空,空表示浏覽器直接鍵入位址,不是通過其他連結跳轉的。
%{User-Agent}i:請求封包中"User-Agent"首部的值,表示,送出請求的應用程式,比如浏覽器,curl,elinks,ab(壓力測試),爬蟲程式等。
詳情請檢視官方文檔
http://httpd.apache.org/docs/2.2/logs.html
檢視日志檔案 /var/log/httpd/access_log
⑩路徑别名
http://www.abc.com/download/bash-4.4.5.el6.x86_64.rpm --> /www/htdocs/download/bash-4.4.5.el6.x86_64.rpm
Alias /URL/ "/PATH/TO/SOMEDIR/"
注意兩個/必須對應有或者沒有
Alias /bbs/ "/forum/htdocs/"
http://www.abc.com/bbs/index.html -->
/forum/htdocs/index.html
bbs/index.html不再從DocumentRoot開始了
Alias /bbs/ "/forum/" 當通路URL中包含/bbs/則到/forum/目錄下查找相關頁面檔案
當通路http://www.abc.com/bbs/index.html時,做别名之前通路的是[DocumentRoot]/bbs/index.html,做了别名後其實通路的是/forum/index.html
⑾設定預設字元集
網站編碼格式
UTF8編碼——支援全球通路
中文——GBK,GB2312
例如,網站源檔案編碼是GBK,設定web伺服器對其解碼時,應該也要支援GBK。而且浏覽器也應該支援GBK。
如何設定預設字元集
AddDefaultCharset UTF-8
GBK,GB2312,GB18030
⑿基于使用者的通路控制
當使用者通路特定資源/敏感資源時,需要先做使用者認證質詢,使用者輸入憑證後發還給伺服器,伺服器驗證通過後才把使用者請求的内容發過來
認證質詢:
WWW-Authenticate:響應碼為401,拒絕客服端請求,并要求使用者提供賬号密碼
認證:
Authorization,用戶端使用者填入賬号和密碼後再次發送請求封包,認證通過後伺服器發送響應的資源
認證時的認證方法:
basic:明文認證方案,存在安全風險
可以放在https中進行
digest:基于消息摘要認證,用戶端發給伺服器端的封包是經過md5的摘要資訊
老版本的浏覽器不支援digest
以上兩種認證都是http協定輔助完成的認證。而現在大多數認證都是表單認證,認證的内容是web伺服器中的程式完成的,而不是借助http協定完成的認證。
這種認證方式應用場景:比如通路[DocumentRoot]/admin/目錄下存在敏感的頁面資源,而web端又沒有表單認證的應用程式時,才借助http的認證輔助完成。[DocumentRoot]/admin/這個目錄稱為安全域。
basic認證機制存儲
使用者的賬号和密碼存儲于何處?
虛拟賬号:僅用于通路某服務時用到的認證辨別。
賬号存儲:文本檔案,mysql資料庫,ldap輕量目錄通路協定,nis
示範:
basic基于文本存儲認證
a.定義安全域
<Directory "/PATH/TO/SOME/DIR/">
Options None
AllowOverride None
AuthType Basic
AuthName "String"
AuthUserFile "/PATH/TO/HTTPD_USER_PASSWD_FILE"
Require user username1 username2
#Require valid-user 允許賬号文本中的所有使用者
</Directory>
vim [DocumentRoot]/admin/index.html
配置檔案/etc/http/conf/httpd.conf任意位置添加
<Directory "/www/htdocs/admin">
AuthName "for admin only"
AuthUserFile "/etc/httpd/conf.d/.htpasswd"
#Require user tom
Require valid-user
退出編輯重載服務reload
b.提供賬号和密碼存儲(文本文本)
使用htpasswd工具來進行管理
man htpasswd 檢視幫助文檔
htpasswd [options] passwordfile username
-c:自動建立passwordfile,僅在建立第一個使用者時使用
-m:使用md5加密使用者密碼
-s:使用sha1加密使用者密碼
-D:删除指定使用者
htpasswd -c -m /etc/httpd/conf.d/.htpasswd tom
輸入密碼:
htpasswd -m /etc/httpd/conf.d/.htpasswd jerry
然後重在服務reload
通路http://IP/admin/
輸入使用者和密碼即可登陸
c.基于組進行認證
配置檔案/etc/http/conf/httpd.conf任意位置添加
AuthGroupFile "/PATH/TO/HTTPD_GROUP_FILE"
Require group GROUP1 GROUP2 ...
#Require user username1 username2
#Require valid-user 允許賬号文本中的所有使用者
要提供使用者賬号檔案群組檔案
使用者帳号檔案使用htpasswd指令來建立
組檔案:每一行定義一個組
GROUP_NAME: user1 user2 user3 ... 這些使用者必須存在于使用者賬号檔案中
示範組認證:
添加第三個使用者,把其中兩個使用者建構成組
htpasswd -m /etc/httpd/conf.d/.htpasswd obama
vim /etc/httpd/conf.d/.htgroup
webadmin: tom obama
修改配置檔案/etc/http/conf/httpd.conf
AuthGroupFile "/etc/httpd/conf.d/.htgroup"
Require group webadmin
#Require valid-user
重載服務reload
通路頁面: tom和obama是可以的
可以用到nagios監控頁面中
⒀虛拟主機
通路一個頁面需要的元素 hostname,ip,port
http://hostname(ip):port/
基于主機名通路web服務時,主機名會被替換為ip位址的,是以主機名如何才能傳到web服務呢?封包需要添加http首部,tcp首部,ip首部,幀首部。在http首部中定義了很多鍵值對形式的首部(名稱 值),其中的Host就是對應主機名資訊的。是以web服務是可以擷取到浏覽器中鍵入的到底是什麼主機名的。是以這個主機名的傳輸是在應用層首部實作的,并且在通信過程中不能發揮作用。
三種實作方案:
基于ip:為每個虛拟主機準備至少一個ip位址,時很少使用
基于port:為每個虛拟主機準備至少一個專用port,對外公開時很少使用
基于hostname:為每個虛拟主機準備至少一個專用hostname
可混合使用上述三種方式的任意方式:
注意:一半虛拟主機莫與中心主機混用,是以要使用虛拟主機,先禁用中心主機,方法是注釋DocumentRoot
每個虛拟主機都有專用配置
<VirtualHost "IP:PORT">
ServerName
DocumentRoot ""
</VirtualHost>
ServerAlias: 虛拟主機名稱
ErrorLog
CustomLog
<Directory "">
</Direcotry>
先注釋中心主機:DocumentRoot
示例1:基于IP的虛拟主機
<VirtualHost 172.16.100.6:80>
ServerName web1.magedu.com
DocumentRoot "/vhosts/web1/htdocs/"
</VirtualHost>
<VirtualHost 172.16.100.7:80>
ServerName web2.magedu.com
DocumentRoot "/vhosts/web2/htdocs/"
檢查配置檔案是否出錯
service httpd configtest
httpd -t
mkdir -pv /vhosts/{web1,web2,web3,web4}/htdocs/
vim /vhosts/web1/htdocs/index.html
vim /vhosts/web2/htdocs/index.html
vim /vhosts/web3/htdocs/index.html
vim /vhosts/web4/htdocs/index.html
reload服務
ifconfig
eth0 172.16.100.6
eth0添加多一個位址
ip addr add 172.16.100.7/16 dev eth0
此時通路
http://172.16.100.7
http://172.16.100.6
示例2:修改配置基于端口通路
<VirtualHost 172.16.100.7:8080>
ServerName web3.magedu.com
DocumentRoot "/vhosts/web3/htdocs/"
Listen 80
Listen 8080
#Listen 80 8080這樣子寫可否?
重新開機服務
http://172.16.100.7:8080
示例3:基于主機名
http-2.2需要啟用NameVirtualHost 172.16.100.6:80,http-2.4則不需要
#注意:所有虛拟主機使用的都是相同的ip位址
重載服務
windows修改hosts檔案
IP hostname1 hostname2 hostname3
使用主機名來通路得到不同的頁面内容
curl http://web1.magedu.com
curl http://web2.magedu.com
curl http://web3.magedu.com
修改配置
CustomLog logs/web1_access_log combined
CustomLog logs/web2_access_log combined
CustomLog logs/web3_access_log combined
ServerName web4.magedu.com
DocumentRoot "/vhosts/web4/htdocs/"
CustomLog logs/web4_access_log combined
⒁内置的status頁面
開啟配置即可
<Location /server-status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from 172.16
</Location>
http://IP/server-status
這個頁面要做使用者賬号的basic認證
使用mod_deflate子產品壓縮網頁,節約帶寬,提升網站響應速度
适用場景:
(1) 節約帶寬,額外消耗CPU;同時,可能有些較老浏覽器不支援;
(2) 壓縮适于壓縮的資源,例如檔案檔案;
需要指令加載該子產品嗎?要的,預設是啟用的
LoadModule deflate_module modules/mod_deflate.so
#調用DEFLATE的輸出過濾器,這個過濾器預設動作就隻有壓縮?
SetOutputFilter DEFLATE
#向DEFLATE過濾器添加比對的内容
# mod_deflate configuration
# Restrict compression to these MIME types
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE text/css
# Level of compression (Highest 9 - Lowest 1)
DeflateCompressionLevel 9
# Netscape 4.x has some problems.
BrowserMatch ^Mozilla/4 gzip-only-text/html
# Netscape 4.06-4.08 have some more problems
BrowserMatch ^Mozilla/4\.0[678] no-gzip
# MSIE masquerades as Netscape, but it is fine
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
http -t 檢查文法
httpd -M | grep deflate 檢查是否裝載此子產品
可以在谷歌浏覽器中F12檢視響應封包的首部
Content-Encoding: gzip
curl -I --compressed http://IP
指明支援壓縮,這樣響應封包就是壓縮格式的
https
基于ssl協定完成的http傳輸
ssl是安全套接字層
ssl多數是使用tls版本1.0
https事務——詳細的通訊過程
1、用戶端連接配接伺服器TCP/443端口
2、基于TCP連接配接建立SSL安全參數握手,協商加密算法,用戶端驗證伺服器證書
3、在SSL上發送HTTP請求/在TCP上發送已加密的請求
4、在SSL上發送HTTP響應/在TCP上發送已加密的響應
5、SSL關閉通知
6、TCP連接配接關閉
用戶端驗證站點證書有效性,步驟如下:
1、日期檢測
2、簽名頒發者可信度檢測
3、簽名檢測
4、站點身份檢測
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搭建案例即可
<VirtualHost *.443>
<VirtualHost IP.443>
以上兩種都可以,SSL隻能基于IP
httpd自帶的工具程式
rpm -ql httpd | grep bin
/usr/sbin/apachectl 是一個shell腳本,可以控制httpd程式的啟動和停止。比如apachectl stop;apachectl restart;沒有服務啟動腳本時可以借助它完成服務的控制
apxs:輔助使用httpd的第三方子產品,比如編譯第三方子產品,很少手動使用該工具
yum install httpd-devel
rotatelogs: 日志滾動工具
access.log --> access.log, access.1.log -->
access.log, access.1.log, access.2.log
suexec: 使用者切換運作
/var/log/secure來做示範
當apache使用者對某個頁面檔案沒有讀取權限,使用者通過URL請求該檔案時,通路是被禁止的。當apache無權通路某檔案時,suexec可以切換到指定使用者來通路之。
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的常用選項:
-A/--user-agent <string> 設定使用者代理發送給伺服器
-basic 使用HTTP基本認證
--tcp-nodelay 使用TCP_NODELAY選項
-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
用法:curl [options] [URL...]
curl http://IP,FQDN
curl -A "IE11" http://IP,FQDN 可以僞裝成其他用戶端類型/其他的浏覽器
curl -e "http://www.google.com.hk/search" http://IP,FQDN 可以僞裝成由谷歌搜尋跳轉通路的
-H/--header 可以自定義首部資訊傳輸給伺服器
-I 隻請求響應首部的内容
elinks
yum install elinks
elinks http://IP,FQDN 進入全屏界面
elinks -dump http://IP,FQDN
http壓力測試工具
指令行工具
ab: apache benchmark,測試效果有限,httpd程式自帶,隻能對單個URL做測試,并不能真正模拟生産環境的通路
webbench,測試效果有限
http_load,測試效果有限
專業級測試工具
需要自定義測試邏輯,自行編寫測試檔案
jmeter:開源工具
loadrunner:商業工具,功能異常強大,測試工程師的專業工具,有相關認證
tcpcopy
網易研發,工作原理:把對舊伺服器的通路流量儲存在一個檔案中,tcpcopy可以讀取該檔案的通路條目,并對新機器做通路重放。真正實作了模拟生産環境的通路。
ab [OPTION] URL
-n: 總的請求數
-c:模拟的并發數
-k:以持久連接配接模拟測試
ulimit -n #:調整目前使用者所同時打開的檔案數
ulimit -n 65535