http是一種網絡傳輸協議,即超文本傳輸協議php
之因此稱之爲超文本是由於此協議既能夠傳輸普通的文本信息還能夠傳輸圖片、音頻、視頻等非文本信息;
css
使用TCP協議的80端口創建鏈接,便可靠的無狀態鏈接;
html
通常採用HTML、CSS、JS等語言編寫代碼;
web
版本更迭 0.9---1.0---1.1---2.0,1.1是目前主流
apache
URI 統一資源標識符緩存
URL 統一資源定位符安全
流量統計服務器
IP 獨立ipcookie
PV 頁面訪問,即頁面刷新量網絡
UV 獨立訪客,經過cookies計算訪客終端的數量
http的工做機制
http request
http response
web資源 一個web頁面並非單個資源而是一組資源的集合
靜態資源 訪問速度快,資源消耗少
文件後綴:.jpg, .html, .txt, .js, .css, .mp3, .avi
動態資源 訪問速度慢,資源消耗多,因此經常結合緩存來解決
文件後綴:.asp, .php, .jsp
下面來闡述一次完整的http請求處理過程
一、創建鏈接:客戶端發出http request與服務端創建tcp鏈接,或成功或失敗
二、接收請求:服務端接收客戶端請求方法中對某一資源的請求
三、處理請求:服務器對請求報文進行解析,根據請求方法、資源、首部等信息進行處理
常見的http請求方法(method):GET、POST、HEAD、PUT、PUSH、OPTIONS、DELETE、TRACE
四、訪問資源:服務端向web資源服務器請求靜態資源或者動態程序運行後生成的資源
五、構建響應報文:web資源服務器響應請求,執行響應動做,並返回相應報文。響應報文中包含狀態碼和響應主體;
六、發送響應報文:也是在tcp鏈接的基礎上,服務端會告訴客戶端數據是什麼格式,用Content-Type表示
常見的Content-Type值 text/xml、image/jpeg、audio/mp3
七、記錄日誌
本文講的http是由apache提供的httpd服務器程序
httpd的特色
高度模塊化:core + modules
DSO:支持動態加載/卸載
MPM:多路處理模塊
MPM主要定義了httpd程序運行時進程的工做模式
prefork
一個主進程生成n個work子進程,每一個子進程處理一個請求,,併發響應是n,至關穩定
worker
一個主進程生成m個子進程,每一個子進程生成n個線程,每一個線程處理一個請求,併發響應是m*n
event
與worker同樣,但會單獨分出一些線程來管理處理請求的線程,即將請求傳遞給服務線程,處理結束又容許釋放。
http-2.2上此版本處於測試階段,http-2.4此版本已經是穩定版
下述說明均在CentOS6.9上的http-2.2版本常見配置
編輯httpd的主配置文件/etc/httpd/conf/httpd.conf
建議修改配置文件前先備份,方便回退,養成這種習慣
一、服務版本信息
ServerTokens Prod 隱藏apache版本
ServerTokens OS 默認設置,顯示apache版本,安全起見建議隱藏
httpd -t 用於httpd配置文件的語法檢查
咱們修改完httpd的配置文件後,可使用此命令檢查語法是否有問題
二、修改監聽的IP和端口
Listen 80 默認設置,監聽本機全部ip的80端口,可根據本身的須要修改
僅企業內部使用時能夠修改成非標準端口,並且能夠同時監聽多個端口
三、持久鏈接
每一個請求獲取完資源後不會斷開鏈接,而是等待下一個請求的完成。默認是關閉持久鏈接功能的
KeepAlive Off 默認是關閉持久鏈接的
KeepAliveTimeout 15 一個鏈接中等待同一客戶端下次請求的超時時間,單位是秒
MaxKeepAliveRequests 100 一次持久鏈接能接受的最大請求數
根據業務需求決定是否啓用持久鏈接,建議遊戲業務開啓持久鏈接
四、MIME 多用途互聯網郵件擴展
服務器在響應客戶端時會掃描每一個資源內容,根據其魔數字與已知模式匹配來肯定響應資源文件的類型
好比,服務端響應資源a.jpg是一張圖片,若是將圖片文件a.jpg修改成a,則依據MIME掃描資源內容得出魔數字依然可以判斷出資源類型是圖片
因此說MIME是依據資源內容而不是後綴來判斷文件類型
五、MPM 多路處理模塊
httpd -l 查看當前使用的模塊,默認是prefork模式
/etc/sysconfig/httpd 此文件能夠修改MPM的工做模式,http-2.2版本保持默認便可
下面對主配置文件中的prefork模式說明
<IfModule prefork.c>
StartServers 8 開啓http服務時啓動的服務進程數
MinSpareServers 5 空閒狀態下存在的最少進程數
MaxSpareServers 20 空閒狀態下存在的最多進程數
ServerLimit 256 最多進程數
MaxClients 256 最大併發數
MaxRequestsPerChild 4000 每一個子進程能處理的最大的請求數,超過此值子進程會被父進程終止並釋放內存空間
</IfModule>
ab -c 100 -n 1000 http://192,168.100.5/index.html httpd自帶的壓力測試工具
六、DSO 動態共享模塊
經過加載特定模塊完成特定功能,以下
LoadModule auth_basic_module modules/mod_auth_basic.so 加載認證模塊,即http能夠基於此模塊實現認證
七、文檔頁面路徑
DocumentRoot "/var/www/html" 默認的網站主頁路徑,即根目錄
當訪問http://www.a.com/test/index.html時,服務端的路徑是/var/www/html/test/index.html
八、定義站點主頁面
DirectoryIndex index.html index.html.var 默認主頁,若是找不到此文件就會報錯
九、站點訪問控制常見機制
可基於客戶端來源地址和帳號這兩種機制實現訪問控制
開能夠基於目錄、文件、通配模式或者URL來實現訪問控制,後續介紹
十、<directory>中基於源地址的訪問控制
(1)options 其後能夠用跟多個列表選項
indexes 指定URL路徑下不存在文件資源時則返回資源列表,不建議使用
followsymlinks 容許訪問軟鏈接指向的源文件,默認是啓用的
none 表示所有拒絕
all 表示所有容許
示例以下
<directory /var/www/html/aaa>
Options -indexes -followsymlinks
</directory>
+ 表示啓用列表選項
- 表示禁用列表選項
(2)allowoverride
哪些指令能夠放在 .htaccess 文件中,覆蓋以前的配置指令,以下例
cat /var/www/html/aaa/.htaccess
Options indexes
#在指定目錄下生成.htaccess文件,並設置好options選項
cat /etc/httpd/conf.d/test.conf
<directory /var/www/html/aaa>
allowoverride all 容許.htaccess文件覆蓋此處的全部指令,至關於options indexes
</directory>
注意
allowoverride none 則.htaccess文件無效
allowoverride indexes 只覆蓋indexes指令,其餘指令不覆蓋,即此處的indexes將被.htaccess文件中定義的指令替代
(3)order和allow、deny
order指定allow和deny的優先級,靠後的優先級高,即order allow,deny則deny優先級高,order deny,allow則allow優先級高
order指定優先級順序,而後使用allow from或者deny from來匹配具體地址,若是allow與deny有重合,則按照order定義的優先級取捨
cat test.conf
<directory /var/www/html/aaa>
<files "a.html">
order allow,deny deny優先級高於allow
deny from 192.168.100.100
allow from 192.168 allow定義的地址與deny定義的地址有重合,以order定義的優先級順序作取捨
</files>
</directory>
十一、日誌設定
ErrorLog logs/error_log 錯誤日誌
CustomLog logs/access_log combined 訪問日誌,combined定義日誌格式
兩種類型的日誌存放位置使用相對路徑,即相對ServerRoot "/etc/httpd"
日誌格式定義以下
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
%h 遠程主機,%l 遠程用戶,%u 驗證遠程用戶,%t服務器接收請求的時間,%r請求報文的首行,包含了請求方法,%>s狀態響應碼
%b響應報文大小,%{Referer}i 請求報文首部referer的值,請求報文中user-agent的值