1.HTTP狀態碼:
1xx: 信息性狀態碼 2xx:成功狀態碼 200OK 201CREATED 3xx:301 永久重定向 302 臨時重定向,會在響應報文中使用location:新位置 4xx:客戶端類錯誤 403 請求被拒絕 404 頁面不存在 405 使用的方法不被允許 5xx:服務器類錯誤 500:服務器類錯誤 502:服務器網管錯誤 503:服務暫時不可用
2.HTTP MPM三種模式:
prefork 中沒有線程的概念,是多進程模型,一個進程處理一個連接;穩定;響應快。其缺點是在連接數比較大時就非常消耗內存。 worker 是多進程多線程模型,一個進程有多個線程,每個線程處理一個連接。與prefork相比,worker模式更節省系統的內存資源。不過,需要注意worker模式下的Apache與php等程序模塊的兼容性。 event 是worker模式的變種,它把服務進程從連接中分離出來,在開啓KeepAlive場合下相對worker模式能夠承受的了更高的併發負載。event模式不能很好的支持https的訪問(HTTP認證相關的問題)
3.HTTPD基礎配置文件:
# grep "Section"/etc/httpd/conf/httpd.conf 全局配置段 ### Section 1: Global Environment 主服務器的配置段 ### Section 2: 'Main' server configuration 虛擬主機配置段,通常不會和主服務器一起使用 ### Section 3: Virtual Hosts 持久連接 KeepAliveOff:使用持久連接{On|Off} MaxKeepAliveRequests100:使用持久連接最大的連接數 KeepAliveTimeout15:使用持久連接的超時時間 MPM模塊 <IfModule prefork.c> StartServers 8 #啓動8個空閒進程 MinSpareServers 5 #最少空閒進程5個 MaxSpareServers 20 #最大空閒進程20個,不能小於空閒進程 ServerLimit 256 #對於MaxClient 最大啓動的server MaxClients 256 #同時允許處理多少個客戶請求256 MaxRequestsPerChild 4000 #每個子進程最多允許處理4000個請求 </IfModule> <IfModule worker.c> StartServers 4 #啓用多少個進程 MaxClients 300 #最大併發的請求 MinSpareThreads 25 #最小空閒進程25個 MaxSpareThreads 75 #最多空閒進程75個 ThreadsPerChild 25 #每個進程最多25個線程 MaxRequestsPerChild 0 #不限定每個線程處理多少個請求 </IfModule> 監聽端口 Listen80 指定要裝載的模塊:DSO LoadModuleauth_basic_module modules/mod_auth_basic.so …… #httpd -D DUMP_MODULES : 查看裝載了哪些模塊 2.)主服務器的配置段 ### Section 2: 'Main' server configuration ServerAdmin root@localhost : 主機名 ServerNamewww.explm.com:80 網站根目錄 DocumentRoot“/var/www/html” 於Directory中可做的訪問控制 OptionsIndexes FollowSymLinks 如果目錄下面沒有主頁,會把目錄下的所有文件以列表方式列出,並可以i提供下載 -Indexes 跟蹤符號連接 -FollowSymLinks 支持在每個頁面下創建.htacces用戶實現對比此目錄中資源訪問時的訪問控制功能 AllowOverrideNone 日誌功能: ErrorLog"/path/to/error_log" LogLevel{debug|info|notice|warn|error|crit|alert|emerg} LogFormat CustomLog"/path/to/access_log" LogFormat_Name CustomLoglogs/access_log combined %h:客戶端地址 %l:遠程登錄名,通常爲- %u:認證時輸入用戶名,沒有認證時爲- %t:服務器收到 用戶請求時的時間 %r:請求報名的起始行 %>s:響應狀態碼 %b:響應報文的長度,單位是字節 %{HEADER_NAME}i:記錄指定首部對應的值
4.CGI腳本:
CGI腳本路徑別名,默認在/var/www/cgi-bin/ CGI如何工作:使服務器提供動態頁面,用戶的請求先到達系統內核的工作區,由內核交由本地監聽在WEB服務上的服務程序,WEB服務器的服務理解用戶請求的是一種特殊腳本的請求,WEB服務器服務不會直接相應客戶。而是通過用戶請求的資源響應給CGI協議,交給CGI的程序解釋器,解釋器會到磁盤上載入所請求的腳本後,在本地執行。並且將直接結果返回給WEB服務器。 ScriptAlias/cgi-bin/ "/var/www/cgi-bin/" :通知WEB服務器/var/www/cgi-bin/目錄下可以存放CGI腳本 var/www/cgi-bin #!/bin/bash cat << EOF Content-Type: text/html <pre> <meta http-equiv="refresh"content="3";url="172.16.32.10/cgi-bin/test.sh" /> #動態刷新頁面,3秒刷新一次 <h1> The host time is: $(date +%T)</h1> <h2>The system load is: $(sar 1 1)</h1> </pre> EOF # chmod +x test.sh
5.基於用戶做訪問控制:
如果想要給虛擬主機做訪問控制,只需要寫入要控制的路徑就好 用戶認證:基本認證,明文發送 Basic 摘要認證,加密後發送的 digest 使用虛擬用戶,不是用戶登錄系統的帳號,僅用戶訪問某服務,或者獲取某資源的認證 可以存放的位置:文本文件(密碼是MD5).httppasswd,數據庫,(dbm基於文本文件的數據庫引擎,比文本的速遞要快,API方式輸出),ldap,輕量級訪問協議 authenticationprovider: 帳號和密碼的存儲機制,簡稱authn authorizationprovider:用戶訪問的路徑 httpd中簡稱:authn 基於文件做訪問控制: <Directory "/var/www/cgi-bin"> Optionsnone #用戶訪問時無任何選項 AllowOverride AuthConfig #做認證相關的配置 AuthTypeBasic #指明認證類型 AuthName"system dmz!" #提示信息 # AuthBasicProvider file AuthUserFile "/etc/httpd/conf/.htpasswd" #指定認證文件存放位置 # Requireadmin Requirevalid-user #允許哪些用戶登錄 valid-user:所有合法的帳號 </Directory> 創建htpasswd認證文件 Htpasswd命令: 選項: -c: 如果事先不存在,則創建,只能在第一次文件本月的時候使用 -m:使用md5方式存儲密碼 # htpasswd -c -m /etc/httpd/conf/.htpasswd admin New password: Re-type new password: Adding password for user admin # cat /etc/httpd/conf/.htpasswd admin:$apr1$BdPIYoGU$rklSzXdEDz3JVFKpawJ8G1
測試下:
輸入正確的密碼後,就可以登錄了
6.虛擬主機:
#DocumentRoot "/var/www/html" <VirtualHost 172.16.32.10:80> ServerName www.zhang.com DocumentRoot "/var/www/web1" </VirtualHost>
7.httpd內嵌處理器handler,輸出status狀態信息:
用到的hendler:server-status 啓用handler使用SetHandler指令 handler:當文件被調圖時,在apache內部的表示形式,一般文件類型都是隱式處理器 # vim /etc/httpd/conf/httpd.conf <Location /server-status> SetHandler server-status # Orderdeny,allow Orderallow,deny # Denyfrom all # Allowfrom .example.com Allowfrom 172.16.0.0/16 </Location> # httpd -t Syntax OK # service httpd reload Reloading httpd: