一、HTTPD特性
讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領域值得信任、有價值的長期合作伙伴,公司提供的服務項目有:國際域名空間、雅安服務器托管、營銷軟件、網(wǎng)站建設、梁河網(wǎng)站維護、網(wǎng)站推廣。httpd:特性
1.事先創(chuàng)建進程:在請求來之前,創(chuàng)建進程監(jiān)聽,加快響應速度
2.按需維持適當?shù)倪M程
3.模塊設計,核心比較小,各個功能都可以按照模塊添加
4.支持多種方式的虛擬主機配置:
Socket IP:Port
1.基于IP的虛擬主機(如果一個server有多個ip,而在互聯(lián)網(wǎng)上,每個IP每年都需要一定的費用)
2.基于端口的虛擬主機(如果不是標準的80端口,那么別人無法知道到底使用的是啥端口)
3.基于域名的虛擬主機(比較好的選擇)
protocol://host:port/path/to/source
=================
Method URL version
header
body
=================
GET /download/linux.tar.bz2 HTTP/1.0
Host: www.harry.com
4.支持https協(xié)議(mod_ssl)
5.支持用戶認證
6.支持基于IP或主機名的ACL
7.支持每目錄的訪問控制
8.支持URL重寫
二、HTTPD安裝
1.rpm包
httpd:
/usr/sbin/httpd(MPM: prefork)
httpd: root,root(master process)
httpd: apache,apache(worker process)
/etc/rc.d/init.d/httpd (啟動腳本)
port:(http: 80/tcp)(https: 443/tcp)
/ec/httpd:工作根目錄,相當于程序安裝目錄
/etc/httpd/conf:配置文件目錄
httpd.conf主配置文件(以段文件分散到conf.d目錄下,以include引入)
conf.d/*.conf
/etc/httpd/modules:模塊路徑(都是連接)
/etc/httpd/logs:->/var/log/httpd:日志目錄
日志文件有兩類:訪問日志access_log錯誤日志err_log
/var/www: 資源文件目錄
html :靜態(tài)文件路徑
cgi-bin:動態(tài)文件路徑
cgi: Common Gateway Interface httpd通過cgi和各個模塊進行通信
client --> httpd(index.cgi) --> spawn process(index.cgi) --> httpd --> client
perl, python, java(servlet,jsp), php
cgi工作原理:
1.一個動態(tài)請求到Web Server,Web Server判斷cgi類型,創(chuàng)建對應的cgi進程來處理動態(tài)請求,并返回html給Web Server,Web Server響應client。動態(tài)cgi進程銷毀
2.fast-cgi:cgi進程池,由master-workers模式
一個動態(tài)請求Web Server,Web Server和master進程通信由master分配給worker進程,來處理
這樣Web Server與cgi可以部署在不同Server上
動靜分離:
----->|------- | |------------|
|Apache|| 應用服務器|
| 如果是靜態(tài)的,|
則直接返回
|
如果是動態(tài)的,
則請求應用服務器------>||
| -------- |
httpd是不處理動態(tài)文件的,而是通過調(diào)用模塊,處理,并返回靜態(tài)文件
2.源碼編譯
三、Global配置
[root@hfdb0001conf]#pwd /etc/httpd/conf [root@hfdb0001conf]#grep"Section*"httpd.conf=>可以看出配置主要有三段。 ###Section1:GlobalEnvironment=>全局配置項 ###Section2:\'Main\'serverconfiguration=>主Server配置 ###Section3:VirtualHosts=>虛擬主機配置(與主Server配置不能同時生效)
ServerTokens OS
http://httpd.apache.org/docs/2.2/zh-cn/mod/core.html#servertokens
ServerTokens Major|Minor|Min[imal]|Prod|[uctOnly]|OS|Full
#超時時間 TCP相關的,如TCP第一次握手后,就不在請求了。
Timeout 120
KeepAlive Off#如果服務器的訪問不大,則需要打開長連接
MaxKeepAliveRequests 100
KeepAliveTimeout 15
#是否使用長連接(tcp連接每次都需要3次握手,而長連接,則第一次三次握手后,一直保持連接狀態(tài)),如果是KeepAlive On,則需要定義MaxKeepAliveRequests 100(即該連接打開后,最多能請求的資源數(shù),不能無盡的請求)。這樣一個用戶請求都會最多能請求100個。 KeepAliveTimeout 15.當用戶擁有一個長連接,但是并不請求,15s后,即自我銷毀了。
#對于繁忙的Server可以降低KeepAliveTimeout的值,可以提高并發(fā)
#eg 當?shù)谝粋€請求到來,獲取一個長連接,他最多能請求100個,到了后,就會斷開連接,重新排隊。這樣下一個請求就能回的連接,請求資源,不然,第一個請求永遠擁有連接,除非自我斷開。
MPM:Multi-Processing Modules(可以切換,通過配置文件修改)
當并發(fā)請求時,Server是如何工作的
1.mpm_winnt
2.prefork(一個請求用一個進程響應)=>預先會生成多個進程,每個進程響應一個請求
3.worker (一個請求用一個線程響應)=>生成多個進程,進程不處理,每個進程生成多個線程,每個線程來處理請求
多線程共享。當同一個進程下的線程已經(jīng)打開了文件,其他線程和讀取,但是存在競爭。需要枷鎖。
4.event (一個進程處理多個請求)
[root@hfdb0001conf]#httpd-l=>查看所有的模塊,可以看到當前只支持prefork模型 Compiledinmodules: core.c prefork.c http_core.c mod_so.c [root@hfdb0001conf]#rpm-qlhttpd|grepbin /usr/sbin/apachectl /usr/sbin/htcacheclean /usr/sbin/httpd=>是默認的,prefork /usr/sbin/httpd.event /usr/sbin/httpd.worker=>可以看出Server是支持worker,event的。 /usr/sbin/httxt2dbm /usr/sbin/rotatelogs /usr/sbin/suexec [root@hfdb0001conf]#httpd.worker-l Compiledinmodules: core.c worker.c http_core.c mod_so.c 我們可以修改配置文件,使得http.worker是默認的 [root@hfdb0001conf]#cat/etc/sysconfig/httpd #Configurationfileforthehttpdservice. # #Thedefaultprocessingmodel(MPM)istheprocess-based #\'prefork\'model.Athread-basedmodel,\'worker\',isalso #available,butdoesnotworkwithsomemodules(suchasPHP). #Theservicemustbestoppedbeforechangingthisvariable. # #HTTPD=/usr/sbin/httpd.worker ....
prefork:
worker:
Listen80 => 監(jiān)聽該Server上所有的80 端口
Listen 8080=>可以監(jiān)聽多個端口
Listten x.x.x.x:8181=> 可以指定IP:端口
Includeconf.d/*.conf=>加載conf.d目錄下所有conf文件(以段文件形式)
LoadModulepath/to/...so
Userapache
Groupapache=>所有的httpd進程,只有一個是root:root權限啟動的,其他的都是apache:apache權限
四、虛擬主機配置概述
Socket IP:Port
1.基于IP的虛擬主機(如果一個server有多個ip,而在互聯(lián)網(wǎng)上,每個IP每年都需要一定的費用)
IP1:80
IP2:80
....:80
2.基于端口的虛擬主機(如果不是標準的80端口,那么別人無法知道到底使用的是啥端口,互聯(lián)網(wǎng)上不好適用)
IP:80
IP:8080
3.基于域名的虛擬主機(比較好的選擇)
IP:80
主機名不同(不同的主機名會被解析到同一個IP和端口上)
www.harry1.com=>都會被解析到IP:80上
www.harry2.com=>都會被解析到IP:80上
通過HTTP協(xié)議的請求頭的host: 來判斷到底訪問的那臺主機
ServerName:www.harry1.com
ServerAlias:www.harry11.com=> 當想www.harry1.com和 www.harry11.com是同一個Server時
DocuemtRoot/www/harry1.com/
.....
.....
當訪問 http://www.harry1.com/images => 自然會解析到/www/harry1.com/這個目錄下的images
Alias=> 當想再訪問http://www.harry1.com/test/images 也要解析到 之前的images目錄,此時需要別名
ErrorLog
CustomLog
ScriptAlias
虛擬主機和中心主機是不能使用的,注釋中心主機的DocumentRoot即可
五、虛擬主機配置
1.基于IP
Host:
ip1:80
ip2:80
注釋httpd.conf的DocuemtRoot配置,即注釋中心主機配置 [root@hfdb0001conf]#pwd /etc/httpd/conf 在conf.d目錄下新建配置文件 [root@hfdb0001conf.d]#pwd /etc/httpd/conf.d [root@hfdb0001conf.d]#ll total12 -rw-r--r--1rootroot392Aug132013README -rw-------1rootroot227Oct3005:39virtual-ip.conf -rw-r--r--1rootroot299Aug22013welcome.conf [root@hfdb0001conf.d]#catvirtual-ip.conf=>前提是要有兩個ip
2.基于端口
Host:
ip:80
ip:8080
在conf.d目錄下新建配置文件 [root@hfdb0001conf.d]#pwd /etc/httpd/conf.d [root@hfdb0001conf.d]#ll total12 -rw-r--r--1rootroot392Aug132013README -rw-------1rootroot227Oct3005:39virtual-ip.conf-bak -rw-------1rootroot227Oct3005:39virtual-port.conf -rw-r--r--1rootroot299Aug22013welcome.conf [root@hfdb0001conf.d]#catvirtual-port.conf
3.基于域名
serverName不同即可
在conf.d目錄下新建配置文件 [root@hfdb0001conf.d]#pwd /etc/httpd/conf.d [root@hfdb0001conf.d]#ll total12 -rw-r--r--1rootroot392Aug132013README -rw-------1rootroot227Oct3005:39virtual-ip.conf-bak -rw-------1rootroot227Oct3005:39virtual-port.conf-bak -rw-r--r--1rootroot299Aug22013welcome.conf [root@hfdb0001conf.d]#catvirtual-domain.conf===>domain需要被解析到該主機上,可以修改hosts可以DNS NameVirutalHost10.224.243.1:80
六、其他配置
1.目錄權限控制
針對某個IP不能訪問www.harry1.com [root@hfdb0001conf.d]#catvirtual-domain.conf===>domain需要被解析到該主機上,可以修改hosts可以DNS NameVirutalHost10.224.243.1:80
2. 身份驗證 轉(zhuǎn)http://www.cnblogs.com/loveCloud/archive/2012/01/12/2320636.html
一、編輯虛擬目錄配置文件,設置認證方式
3.Location配置 相對于Directory是配置本地文件系統(tǒng)路徑的,而Location是針對URL路徑的