天天看點

03httpd-2.2基礎配置

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