一、HTTP軟體
1、http伺服器應用
http伺服器程式
httpd apache
nginx
lighttpd
應用程式伺服器
IIS .asp
tomcat .jsp
jetty 開源的servlet容器,基于Java的web容器
Resin CAUCHO公司,支援servlets和jsp的引擎
webshpere(IBM), weblogic(BEA), jboss,oc4j(Oracle)
市場占有率統計
www.netcraft.
2、httpd介紹
httpd(主程式名字)
20世紀90年代初,國家超級計算機應用中心NCSA開發
1995年開源社群釋出apache(名字簡稱 a patchy server)
ASF: Apache Software Foundation(特意成立的基金會)
FSF:Free Software Foundation(自由軟體基金會)
特性:
高度子產品化:core + modules (子產品開發模式,核心加子產品)
DSO: Dynamic Shared Object 動态加/解除安裝
MPM:multi-processing module多路處理子產品
3、MPM工作模式
prefork:多程序I/O模型,每個程序響應一個請求,預設模型
一個主程序:生成和回收n個子程序,建立套接字,不響應請求
多個子程序:工作work程序,每個子程序處理一個請求;系統初始時,預先生成多個空閑程序,等待請求,最大不超過1024個
worker:複用的多程序I/O模型,多程序多線程,IIS使用此模型
一個主程序:生成m個子程序,每個子程序負責生個n個線程,每個線程響應一個請求,并發響應請求:m*n
event:事件驅動模型(worker模型的變種)
一個主程序:生成m個子程序,每個程序直接響應n個請求,并發響應請求:m*n,有專門的線程來管理這些keep-alive類型的線程,當有真實請求時,将請求傳遞給服務線程,執行完畢後,又允許釋放。這樣增強了高并發場景下的請求處理能力
httpd-2.2: event 測試版,centos6預設
httpd-2.4:event 穩定版,centos7預設

4、程序角色
監聽 --> 工作 --> 隊列空閑
5、httpd功能特性
虛拟主機(通常一個網站在一個伺服器上,但如果網絡通路量不大,可以在一個伺服器上運作多個網站,就叫虛拟主機)
具體實作通過修改下列三項進行建設虛拟主機
IP、Port、FQDN
CGI:Common Gateway Interface,通用網關接口
httpd處理不了的事物可以轉發給能處理的機器上去,就是通過通用網關接口完成的
反向代理
根據使用者的請求,把使用者排程到相應的伺服器上
負載均衡
路徑别名
豐富的使用者認證機制
basic -->不加密認證
digest -->加密認證,但相容性較差,有部分浏覽器不支援
支援第三方子產品
二、Httpd安裝
1、安裝方法
版本
CentOS 6: 2.2
CentOS 7: 2.4
安裝方式:
rpm:centos發行版,穩定,建議使用
編譯:定制或特殊需求
CentOS 6程式資訊:
httpd-2.2
配置檔案位置:
/etc/httpd/conf/httpd.conf
/etc/httpd/conf.d/*.conf
檢查配置文法:
httpd –t
service httpd configtest
2、CentOS 6 httpd程式環境
服務腳本(啟動腳本):/etc/rc.d/init.d/httpd
腳本配置檔案:/etc/sysconfig/httpd
服務控制和啟動:
chkconfig httpd on|off
service {start|stop|restart|status|configtest|reload} httpd
站點網頁文檔根目錄:
/var/www/html
子產品檔案路徑:
/etc/httpd/modules
/usr/lib64/httpd/modules
主程式檔案(MPM模式檔案):
/usr/sbin/httpd(預設模式)
/usr/sbin/httpd.worker
/usr/sbin/httpd.event
主程序檔案:
/etc/httpd/run/httpd.pid
日志檔案目錄:
/var/log/httpd
access_log: 通路日志
error_log:錯誤日志
幫助文檔包:
httpd-manual
三、Httpd 2.2常見配置
1、httpd配置檔案的組成
# grep "Section" /etc/httpd/conf/httpd.conf
配置檔案的主要内容分成三個部分
### Section 1: Global Environment --->全局環境
### Section 2: 'Main' server configuration --->主伺服器設定
### Section 3: Virtual Hosts --->虛拟主機
配置格式:directive value --->類似于鍵值對或者前面是關鍵字|變量|指令後面是一個值
directive: 不區分字元大小寫
value: 為路徑時,是否區分大小寫,取決于檔案系統
2、顯示伺服器版本資訊
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
This setting applies to the entire server and cannot be enabled or disabled on a virtualhost-by-virtualhost basis.
#此設定适用于整個伺服器,并且不能基于虛拟主機虛拟主機啟用或禁用該設定
After version 2.0.44, this directive also controls the information presented by the ServerSignature directive.
#在版本2.0.44之後,該指令還控制由ServerSignature指令提供的資訊。
建議使用:ServerTokens Prod
3、修改監聽的IP和Port
Listen [IP:]PORT
(1) 省略IP表示為本機所有IP
(2) Listen指令至少一個,可重複出現多次
Listen 80
Listen 8080
示例:
Listen 192.168.1.100:8080 ---> 8080這個端口,隻能用這個ip段通路
Lsten 80
4、持久連接配接
Persistent Connection:連接配接建立,每個資源擷取完成後不會斷開連接配接,而是繼續等待其它的請求完成,預設關閉持久連接配接
斷開條件:數量限制:100
時間限制:以秒為機關, httpd-2.4 支援毫秒級
副作用:對并發通路量較大的伺服器,持久連接配接功能會使用有些請求得不到響應
折衷:使用較短的持久連接配接時間
設定:
KeepAlive On|Off
KeepAliveTimeout 15
MaxKeepAliveRequests 100
測試:
telnet WEB_SERVER_IP PORT
GET /URL HTTP/1.1
Host: WEB_SERVER_IP
5、MPM( Multi-Processing Module)多路處理子產品
prefork, worker, event(試驗階段)
httpd-2.2不支援同時編譯多個子產品,是以隻能編譯時標明一個
rpm安裝的包提供三個二進制程式檔案,分别用于實作對不同MPM機制的支援
确認方法:
ps aux | grep httpd
預設為/usr/sbin/httpd, 即prefork模式
檢視子產品清單
檢視靜态編譯的子產品
httpd -l
檢視靜态編譯及動态裝載的子產品
httpd –M
動态子產品加載:不需重新開機即生效
動态子產品路徑
/usr/lib64/httpd/modules/
更換使用的httpd程式:
/etc/sysconfig/httpd
HTTPD=/usr/sbin/httpd.worker
重新開機服務生效
pstree -p|grep httpd 檢視程序和線程
Httpd 2.4 與之不同
以動态子產品方式提供
配置檔案:/etc/httpd/conf.modules.d/00-mpm.conf
httpd –M |grep mpm
prefork的預設配置:
<IfModule prefork.c>
StartServers 8 --->預設啟動服務的子程序數量
MinSpareServers 5 --->最小的空閑線程
MaxSpareServers 20 --->最大的空閑線程
ServerLimit 256 --->最多程序數,最大20000
MaxClients 256 --->最大并發
MaxRequestsPerChild 4000 --->伺服器程序提供的最大請求數
</IfModule>
#4000是子程序最多能處理的請求數量。在處理MaxRequestsPerChild 個請求之後,子程序将會被父程序終止,這時候子程序占用的記憶體就會釋放(為0時永遠不釋放)
worker的預設配置:
<IfModule worker.c>
StartServers 4 --->預設啟動服務的子程序數量
MaxClients 300 --->最大通路客戶數量(最多支援300個用戶端并發通路)
MinSpareThreads 25 --->最小的空閑線程
MaxSpareThreads 75 --->最大的空閑線程
ThreadsPerChild 25 --->每個子程序帶的線程數量
MaxRequestsPerChild 0 無限制 --->伺服器程序提供的最大請求數
壓力測試r軟體包
6、DSO: Dynamic Shared Object
動态共享對象
加載動态子產品配置
/etc/httpd/conf/httpd.conf
配置指定實作子產品加載格式:
LoadModule <mod_name> <mod_path>
子產品檔案路徑可使用相對路徑:
相對于ServerRoot(預設/etc/httpd)
LoadModule auth_basic_module modules/mod_auth_basic.so
7、定義'Main' server的文檔頁面路徑(主目錄)
DocumentRoot “/path”
文檔路徑映射:
DocumentRoot指向的路徑為URL路徑的起始位置
DocumentRoot "/app/data“
http://HOST:PORT/test/index.html --> /app/data/test/index.html
注意:SELinux和iptables的狀态
8、定義站點首頁面
DirectoryIndex index.html index.html.var
服務預設找文檔頁面路徑下這兩個格式的檔案
9、站點通路控制常見機制
可基于兩種機制指明對哪些資源進行何種通路控制,通路控制機制有兩種:
用戶端來源位址
使用者賬号
檔案系統路徑:
<Directory “/path"> --->針對特定的目錄
... --->需要是這裡制定的ip或者使用者才能通路
</Directory>
<File “/path/file”> --->或者針對檔案控制
...
</File>
<FileMatch "PATTERN"> --->正規表達式控制
</FileMatch>
URL路徑:
<Location ""> --->特定的URL路徑,進行控制
</Location>
<LocationMatch "">
</LocationMatch>
<FilesMatch "\.(gif|jpe?g|png)$"> --->字尾為gif、jpeg、jpg、png的檔案為比對條件
<Files “?at.*”> 通配符
<Location /status>
<LocationMatch "/(extra|special)/data">
10、<Directory>中“基于源位址”實作通路控制
(1) Options:後跟1個或多個以空白字元分隔的選項清單
在選項前的+,- 表示增加或删除指定選項
常見選項:
Indexes:指明的URL路徑下不存在與定義的首頁面資源相符的資源檔案時,傳回索引清單給使用者
FollowSymLinks:允許通路符号連結檔案所指向的源檔案
None:全部禁用
All: 全部允許
<Directory /web/docs>
Options Indexes FollowSymLinks --->在這個目錄下支援索引清單
<Directory /web/docs/spec>
Options FollowSymLinks
<Directory /web/docs>
Options Indexes FollowSymLinks
</Directory>
<Directory /web/docs/spec>
Options +Includes -Indexes
(2) AllowOverride
與通路控制相關的哪些指令可以放在指定目錄下的.htaccess(由AccessFileName指定)檔案中,覆寫之前的配置指令
隻對<directory>語句有效
AllowOverride All: 所有指令都有效
AllowOverride None:.htaccess 檔案無效
AllowOverride AuthConfig Indexes 除了AuthConfig 和Indexes的其它指令都無法覆寫
(3) order和allow、deny
放在directory, .htaccess中
order:定義生效次序;寫在後面的表示預設法則
Order allow,deny
Order deny,allow
Allow from和Deny from:定義用戶端位址
用戶端位址:
IP --->IP位址
網絡: 172.16 --->網段模式
172.16.0.0
172.16.0.0/16
172.16.0.0/255.255.0.0
如果拒絕和允許沖突,以最後面的條件優先級高。
判斷條件
allow、deny
deny、allow
allow only
allow
deny only
deny
allow deny
none
注意:設定條件多的,放在後面
<files "*.txt">
order deny,allow
deny from 172.16. 100.100
allow from 172.16
</files>
order allow,deny
deny from 172.16.100.100
11、日志設定
日志類型:
通路日志
錯誤日志
錯誤日志:
ErrorLog logs/error_log
LogLevel warn
LogLevel 可選值:
debug, info, notice, warn,error
crit, alert, emerg
通路日志:
定義日志格式:LogFormat format strings
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
使用日志格式:
CustomLog logs/access_log combined
參考幫助:http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#formats
%h 用戶端IP位址
%l 遠端使用者,啟用mod_ident才有效,通常為減号“-”
%u 驗證(basic,digest)遠端使用者,非登入通路時,為一個減号“-”
%t 伺服器收到請求時的時間
%r First line of request,即表示請求封包的首行;記錄了此次請求的“方法”,“URL”以及協定版本
%>s 響應狀态碼
%b 響應封包的大小,機關是位元組;不包括響應封包http首部
%{Referer}i 請求封包中首部“referer”的值;即從哪個頁面中的超連結跳轉至目前頁面的
%{User-Agent}i 請求封包中首部“User-Agent”的值;即送出請求的應用程式
12、設定預設字元集
AddDefaultCharset UTF-8
中文字元集:GBK, GB2312, GB18030
13、定義路徑别名
格式:
Alias /URL/ "/PATH/"
DocumentRoot "/www/htdocs"
http://www.magedu.com/download/bash.rpm ==> /www/htdocs/download/bash.rpm
http://www.magedu.com/images/logo.png ==> /www/htdocs/images/logo.png
Alias /download/ "/rpms/pub/"
http://www.magedu.com/download/bash.rpm ==> /rpms/pub/bash.rpm