1. 程式人生 > >apache的學習筆記

apache的學習筆記

apache的學習

web service:
傳輸層:提供進程地址.
Port Number:
tcp:傳輸控制協議,面向連接的協議,通信是建立虛擬鏈路,結束後拆除鏈路.
0-65535
udp:user datagram protocol,無連接的協議.
0-65535
IANA:
0-1023:永久分配給固定的應用使用.
1024-41951:亦為註冊端口,但要求不是太嚴格,分配給程序註冊為某應用程序使用.
41952+:客戶端隨機使用的端口.(動態端口或私有端口)
其範圍定義:/proc/sys/net/ipv4/ip_local_port_range
在客戶端和服務器端通信是使用的是一對socket.

套接字(socket):
IPC的一種實現,允許位於不同主機(甚至同一主機)上的不同進程之間進行通信,數據交換;socket API,出現於1983年左右,最早在4.2的BSD系統上實現.

類型:
SOCK_SIREAM:tcp socket
SOCK_DGRAM:udp socket
SOCK_RAM:裸socket
ipv4地址私有地址:
10.0.0.0/8
172.16.0.0/16-172.31.0.0/16
192.168.0.0/24-192.168.255.0/24

 通信過程中兩方主機內核中都會有發送緩沖和接收緩沖,客戶端的接收緩沖對應服務器端的發送緩沖.

tcp協議的特性:
請求連接,三次握手
將數據打包成段,校驗和(CRC-32)
確認,重傳以及超時
排序,邏輯序號
流量控制:滑動窗口算法
擁塞控制:慢啟動和擁塞避免算法

Socket Domain(根據使用的地址不同)
AF_INET:address family:ipv4.

AF_INET6:ipv6.
AF_UNIX:同一主機上不同進程進行通信時使用.
每類套接字都至少提供了兩種socket:流.數據報.
流:可靠的傳遞,面向連接,無邊界.
數據報:不可靠地傳遞,有邊界.

套接字相關的系統調用:
socket():創建一個套接字.
bind():綁定.
listen():監聽.
accept():接收請求.
connect():請求連接建立.
write():發送數據.
read():接收數據.
send(),recv(),sendto(),recvfrom().

http:超文本傳輸協議(hyper text transfer protocol).
html:編程語言,超文本標記語言.

MIME:multipurpose Internet mail extesion

工作機制:
http請求
http響應
http資源:web resource
靜態文件:.jpg,.html,.gif,.txt,.js,.css,.avi
動態文件:.php,.jsp.

  媒體:
    媒體類型(MIME類型):major/minor
        text/html
        text/planin
        image/jpeg
        image/gif

URI:uniform resource identifier
URL(uniform resource locator):用於描述某服務器某特定資源的位置.
Scheme://Server:Port/Path/to/resource
URN(uniform resource naming)

http協議版本:
HTTP/0.9:原型版本,功能簡陋.
HTTP/1.0:第一個廣泛使用的版本,支持MIME.
HTTP/1.1:增強了緩存功能.
SPDY:谷歌開發的一種協議,通過壓縮,多路復用和優先級來縮短加載時間.
HTTP/2.0:

一次完整的http請求過程:
(1) 建立或處理連接:接收請求或拒絕請求.
(2) 接收請求:
接收來自於網絡的請求報文中對資源的一次請求的過程.
並發訪問響應模型(web I/O):
單進程I/O結構:啟動一個進程處理用戶請求,而且一次只處理一個,多個請求串行響應.
多進程I/O結構:啟動多個線程,每一個進程響應一個請求.
復用I/O結構:一個進程響應n個請求.
多線程模型:一個進程生成n個線程.
事件驅動:event-driven
復用的多進程I/O結構:一共啟動多個進程,每個進程響應n個請求.
(3) 處理請求:
對請求報文進行解析,並獲取請求的資源及請求方法等相關信息.
元數據:請求報文首部
<method> <URL> <VERSION>
Host:www.baidu.com 請求的主機名稱
Connection:指明這次連接的方式
(4) 訪問或獲取資源:
獲取請求報文中請求的資源.
web服務器:即存放了web資源的服務器,負責向請求者提供對方請求的靜態資源,或動態運行後的生成的資源,這些資源放在本地文件系統某路徑下,此路徑通常稱為DocRoot
(5) 構建響應報文.
(6) 發送響應報文.
(7) 記錄日誌.

http服務器程序:
httpd(apache)
nginx
lighttpd

  應用程序服務器:
    IIS
    tomcat,jetty,jboss,resin
    webshpere,weblogic,oc4j

httpd的安裝配置和使用:
httpd:apache
a patchy server=apache
ASF:apache software foundation

httpd的特性:
高度模塊化(DSO機制):core + modules
DSO:dynamic shared object
MPM:multi-processing modules(多路處理模塊)
prefork:多進程模型,每個進程響應一個請求.
一個主進程負責生成n個子進程,子進程也稱為工作進程,每個子進程處理一個用戶請求,即便沒有用戶請求,也會預先生成多個空閑進程,隨時等待請求到達,最大不會超過1024個.
worker:多線程模型,多進程生成,一個進程生成多個線程,一個線程響應一個請求.
event:事件驅動模式,一個線程響應多個請求

安裝apache:
安裝方式:
rpm
編譯
centos6:2.2
centos7:2.4
程序環境:
配置文件:
/etc/httpd/conf/httpd.conf
/etc/httpd/conf.d/*.conf
服務腳本:
/etc/rc.d/init.d/httpd
配置文件:
/etc/sysconfig/httpd
主程序文件:
/usr/sbin/httpd
/usr/sbin/httpd.event
/usr/sbin/httpd.worker
日誌文件目錄:
/var/log/httpd
access.log:訪問日誌.
error.log:錯誤日誌.
站點文件目錄:
/var/www/html
模塊文件路徑;
/usr/lib64/

常用配置:
1.修改監聽的ip和port.
Listen [ip:] port
省略ip表示監聽本機所有ip;Listen可重復出現多次.
2.持久連接.
persistent connection:連接建立,每個資源獲取完成後不會斷開連接,而是繼續等待其他的請求完成.
任何斷開?
數量限制:默認100
時間超時:可配置
副作用:對並發訪問量較大的服務器,持久連接功能會使有些請求得不到響應.
折衷:使用較短的持久連接功能.
httpd-2.4支持毫秒級持久時間.
KeepAlive On|Off:是否允許長連接.
MaxKeepAliveRequests #:最大的持久連接數.
KeepAliveTimeout #:等待下一個連接的秒數.
默認為/usr/sbin/httpd.其使用prefork
查看模塊列表:
查看靜態編譯的模塊:
httpd -l:查看靜態編譯的模塊
查看靜態編譯及動態裝載的模塊.
httpd -M

更換使用的httpd程序:
打開/etc/sysconfig/httpd中的關於worker的一行

關於mpm_Profork的選項:
<IfModule prefork.c>
StartServers 8 :開始啟動時啟動的進程數,即幾個主進程的子進程.
MinSpareServers 5 :最少空閑進程數.
MaxSpareServers 20 :最大空閑進程數.
ServerLimit 256 :能夠為MaxClients準備的服務器進程數量.
MaxClients 256 :允許同時連接的最大請求數量.
MaxRequestsPerChild 4000:一個服務器進程最大能夠請求多少個請求,相當於生命周期一樣.
</IfModule>
mpm_worker的選項:
<IfModule worker.c>
StartServers 4 :服務器啟動時啟動的進程.
MaxClients 300 :服務器端最大啟動的線程數.
MinSpareThreads 25 :最少空閑線程數.
MaxSpareThreads 75 :最大空閑線程數.
ThreadsPerChild 25 :每個進程能啟動的線程數.
MaxRequestsPerChild 0 :每個線程能接收的請求數.
</IfModule>

PV,UV
PV:Page View:頁面訪問量.
UV:User View:用戶訪問量.
獨立ip量

DSO(動態共享對象)
配置指令實現模塊加載
loadmodule <mod_name> <mod_path>

模塊路徑可使用相對地址
  相對於ServerRoot執行的路徑而言的.

定義‘Main‘ server.
DocumentRoot
文檔路徑映射:
DocumentRoot指向的路徑為URL路徑的起始位置.
DocumentRoot "/var/www/html"
index.html -->http://HOST:PORT/index.html

站點訪問控制
可基於兩種類型的路徑指向對那些資源進行訪問控制
文件系統路徑
<Direcotry ""></Direcotry>
<File ""></File>
<FileMatch ""></FileMatch>
URL路徑
<Location ""></Location>

訪問控制機制
   基於來源地址
   基於用戶賬號密碼

7.Directory中基於來源地址實現訪問控制
(1)options
所有可用特性:Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
Indexes:索引
FollowSymLinks:允許跟蹤符號鏈接文件
SymLinksifOwnerMatch:符號鏈接的文件和原文件屬主是同一個是允許
ExecCGI:允許執行CGI腳本
MultiViews:執行隱含文件名匹配
(2)基於來源地址的訪問控制
Order:檢查次序
Order allow,deny
Order deny,allow
後面的是默認機制.
Order allow,deny
allow from
deny all
來源地址:
ip
netadd
172.16
172.16.0.0
172.16.0.0/16
172.16.0.0/255.255.0.0

8.定義默認主頁面
DirectoryIndexes index.html index.html.var

9.日誌設置
錯誤日誌:
Errorlog logs/error_log
Errorlog warn
debug,info,notice,warn,erro,crit,alert,emerg

訪問日誌
CustomLog logs/access_log combined

    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%h %l %u %t \"%r\" %>s %b" common
    LogFormat "%{Referer}i -> %U" referer
    LogFormat "%{User-agent}i" agent
      %h:客戶端地址
      %l:remote logname (from identd,if supplied). -表示為空
      %u:remote user,登錄的用戶名
      %t:time the request was received ,服務器收到請求的時間
      %r:first line ofrequest,請求報文的首部的信息.
      %>s:響應狀態碼
      %b:響應報文的大小,單位是字節,不包括響應報文首部
      %{Referer}i:請求報文當中"referer"首部的值,當前資源的訪問入口,即從哪個頁面中的超鏈接跳轉而來
      %{User-Agent}i:請求報文當中"User-Agent"首部的值,即發出請求的應用程序

路徑別名
DocumentRoot "/var/www/html"
http://www.zeng.com/fang
-->/www/apache/fang
Alias /URL/ "/PATH/TO/SOMEDIR"

  Alias /bbs/  "/www/apache/fang"

設定默認編碼格式
AddDefaultCharset UTF-8
GBK,GB2312,GB18030

基於用戶的訪問控制
認證質詢
www-Authenicate:響應碼為401,拒絕客戶端請求,並說明要求客戶提供賬號和密碼.
認證:
Authorization:客戶端郵件填入賬號和密碼後再次發送請求報文,認證通過,則服務器發送響應的資源
認證類型:
basic:明文
digest:消息摘要

  安全域:需要用戶認證後才能訪問的路徑
      應該通過名稱對其進行標識,並用於告知用戶認證的原因
  用戶的賬號和密碼存儲於何處
     存儲:
       文本文件
       SQL數據庫
       ldap
       nis
    basic認證:
      (1)定義安全域
          <Directory "">
            Options None
            AllowOverride None
            AuthType Basic
            AuthName "STRING"
            AuthUserFile "/PATH/TO/HTTPD_USER_PASSWD_FILE"
            Require user username1 username2 ...
            AuthGroupFile "/PATH/TO/HTTPD_GROUP_PASSWD_FILE"
          <Directory>
             允許賬號文件中的所有用戶登錄訪問
                Require valid-user
              使用組登錄時需要定義用戶文件和組文件.
                 組文件:每行定義一個組
                   GROUP_NAME:user1 user2 user3
      (2)提供賬號和密碼存儲
          htpasswd命令進行管理
            htpasswd [options] passwdfile username 
              -c:自動創建passwdfile,僅在第一次添加用戶時使用
              -m:md5加密用戶密碼
              -s:sha1加密用戶密碼
              -D:刪除指定用戶
         例:
            <Directory "/var/www/fang">
              Options Indexes
              AllowOverride None
              AuthType Basic
              AuthName "fang"
              AuthUserFile "/etc/httpd/conf/.htpasswd"
              Require valid-user
              AuthGroupFile "/etc/httpd/conf/.htgroup"
            </Directory>

虛擬主機
三種實現方案:
基於ip:
為每個虛擬主機準備至少一個ip地址
基於主機名:
為每個虛擬主機準備一個主機名
基於端口:
為每個虛擬主機準備至少一個專用端口,實踐中很少使用
註意:中心主機不要和虛擬主機一起使用
方法:註釋DocumentRoot

每個虛擬主機都有專用配置:
<VirtualHost "ip:port">
ServerName
DocumentRoot ""
</VirtualHost>
ServerAlias:虛擬主機的別名
Errorlog:錯誤日誌
Accesslog:訪問日誌
<Directory "">
</Directory>
示例1:基於ip的虛擬主機
<VirtualHost 192.168.137.143:80>
ServerName web1.zeng.com
DocumentRoot "/vhost/web1/htdocs"
</VirtualHost>

<VirtualHost 192.168.137.129:80>
     ServerName web2.zeng.com
     DocumentRoot "/vhost/web2/htdocs"
</VirtualHost>

內置的status頁面
<Location /server-status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from .example.com
</Location>
界面中表示的意義:
“_”等待連接,“S”啟動,“R”讀取請求,
“W”發送回復,“K”Keepalive(已讀),“D”DNS查找,
“C”關閉連接,“L”記錄,“G”順利完成,
“I”閑暇清理工人,“.” 打開沒有當前進程的插槽
如果要顯示更詳細的信息,可以打開ExtendedStatus On這個選項.

apache的學習筆記