(1)當用戶在瀏覽器輸入一個URL,且回車,會先進行DNS解析請求
(2)客戶端拿到DNS解析請求返回的IP以後,去請對應的服務器站點的資源
(3)服務器端判斷是否接受請求,若是接收請求,會對請求報文進行解析,分析請求報文的請求頭信息,分析請求頭的請求資源
(4)服務器端對請求頭的請求資源進行解析以後,構建響應頭和響應體,組合爲響應報文
(5)服務端發送響應報文給客戶端,服務端在本地記錄http對應的日誌信息
(6)客戶端解析響應報文
(1)httpd(Apache)
(2)nginx
(3)lighted
(4)IIS
(5)tomcat
(6)Tengine
...
基於紅帽6RPM包安裝的httpd2.2版本、基於紅帽7RPM包安裝的httpd2.4版本
配置文件:
/etc/httpd/conf/httpd.conf 主配置文件
/etc/httpd/conf.d/*.conf 主配置文件
服務腳本
/etc/rc.d/init.d/httpd
腳本配置文件:
/etc/sysconfig/httpd 腳本配置文件中定義了,httpd以哪一種MPM模式啓動
主程序文件
/usr/sbin/httpd
/usr/sbin/httpd.event
/usr/sbin/httpd.worker
日誌文件
/var/log/httpd:
access_log:訪問日誌
error_log:錯誤日誌
站點文檔
/var/www/html
模塊文件路徑
/usr/lib64/httpd/modules
啓動程序和開機自啓
service {start|stop|restart|status|configtest|reload} httpd
chkconfig httpd on
配置文件
/etc/httpd/conf/httpd.conf 主配置文件
/etc/httpd/conf.d/*.conf 其餘配置文件
/etc/httpd/conf.modules.d/*.conf 模塊相關的配置文件
systemd 啓動腳本文件 (服務腳本)
/usr/lib/systemd/system/httpd.service
主程序
/usr/sbin/httpd
日誌文件(其中access_log:訪問日誌,error_log:錯誤日誌)
/var/log/httpd
中心主機站點根路徑
/var/www/html
模塊文件路徑
/usr/lib64/httpd/modules
啓動程序和開機自啓
systemctl {start|stop|restart|status|reload} httpd.service
systemctl enable httpd.service
(五)httpd2.2詳解
html
基於紅帽6RPM包安裝的httpd2.2版本、基於紅帽7RPM包安裝的httpd2.4版本
(1)主配置文件:/etc/httpd/conf/httpd.conf
全局配置:Section 1: Global Environment 第33行
中心主機配置: Section 2: ‘Main’ server configuration 第246行
虛擬主機配置:Section 3: Virtual Hosts 第986行
(2)每一次修改配置文件以後,可使用httpd -t檢查配置文件是否錯誤,通常若是沒有給ServerName值的話會報錯,那麼給一個IP做爲ServerName的值
httpd -t
配置文件詳細介紹
(超級重要必須掌握)
在全局配置段,能夠修改其監聽的端口, 修改監聽的端口以後,只有重啓服務才能生效,reload不能生效,只能restart
Listen 80 能夠改成:Listen 8000
因爲web服務的鏈接是:基於一個TCP的虛鏈接,http事務可重複執行屢次。例如咱們打開https://www.taobao.com,首先返回的是首頁的HTML骨架資源,再返回的是CSS級聯樣式表資源,最後返回的是JavaScript代碼資源。TCP鏈接創建後,每一個資源獲取完成後不全斷開鏈接,而是繼續等待其餘資源請求的進行
KeepAlive On 或 Off :設置TCP保持鏈接關閉或開啓
KeepAliveTimeout 15 :設置保持鏈接的超時時長
MaxKeepAliveRequests 100 : 設置最大保持鏈接數量
httpd-2.2不支持同時編譯多個MPM模塊,因此只能編譯選定要使用的那個模塊,CentOS 6的rpm包爲此專門提供了三個程序文件,httpd(prefork),httpd.worker,httpd.event,分別用於實現對不一樣的MPM機制的支持。
當httpd啓動時候,可使用 ps aux | awk '/httpd$/{print $11}' 命令查看當前httpd是以哪種機制運行的,若是是/usr/sbin/httpd,那麼就是以prefork模式運行的,若是是/usr/sbin/httpd.worker,那麼就是以worker模式運行的,若是是/usr/sbin/httpd.event,那麼就是以event模式運行的。
使用 httpd -l 命令能夠查看編譯的核心模塊
使用 httpd -M 查看靜態編譯及動態編譯的模塊
在配置文件中能夠配置prefork模式和worker模式的屬性信息
<IfModule prefork.c>
StartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 256
MaxClients 256
MaxRequestsPerChild 4000
</IfModule>
<IfModule worker.c>
StartServers 4
MaxClients 300
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
</IfModule>
LoadModule <模塊名> <模塊相對路徑>
例如:LoadModule auth_basic_module modules/mod_auth_basic.so
這裏的auth_basic_module是模塊名,modules/mod_auth_basic.so是模塊文件的路徑,若是模塊前面沒有路徑,表示啓用相關模塊
模塊的徹底路徑是:/etc/httpd/modules/*
指定DocumentRoot(這是中心主機的站點根目錄,中心主機的根站點目錄能夠更換)
例如:DocumentRoot "/var/www/html"
能夠修改成其餘的路徑:DocumentRoot "/app/www"
1:基於文件系統路徑的訪問控制
<Directory "/var/www/html">
這樣的訪問控制代表,對於/var/www/html目錄下的全部的文件均有效
</Directory>
<File "某文件路徑">
這樣的訪問控制代表,對於某文件路徑有效
</File>
<FileMatch "模式匹配">
這樣的訪問控制代表,對於被模式匹配到的文件有效
</FileMatch>
2:基於URL的訪問控制
# 顯示httpd服務器的狀態信息,這樣的訪問控制代表,對於訪問http:
1:Options:用於控制目錄中全部的資源被訪問的方式,後跟一個或多個以空白字符分割的選項列表
Indexes:若是輸入的網址對應服務器上的一個文件目錄,而此目錄中又沒有DirectoryIndex指令(例如:DirectoryIndex index.html index.http.var),那麼服務器會返回由mod_autoindex模塊生成的一個格式化後的目錄列表,可是若是訪問的是根路徑就返回Apache的首頁信息
FollowSymLinks:服務器容許在此目錄中使用符號鏈接。若是該配置選項位於<Location>配置段中,將會被忽略。
通常來講,在Options這一項設置爲 None。
2:AllowOverride:與訪問控制相關的哪些指令能夠放在.htaccess文件(每一個目錄下均可以有一個)中
ALL:全部指令均可以放進去
None:全部指令都不能夠放進去
3:order和allow、deny
Order:定義生效次序,寫在後面的表示默認法則
Allow from all:代表任意網段均可以訪問
Deny from all:代表任意網段都不能夠訪問
例如:
Allow from 192.168.23.0/24:表示只是容許192.168.23.0網段的主機訪問。
Allow from 192.168.23.24/32:表示只是容許192.168.23.24主機訪問。
DirectoryIndex index.html index.html.var
若是在站點根目錄沒有index.html,那麼直接在瀏覽器輸入域名就會返回Apache的首頁信息
定義格式爲:Alias /文件系統路徑/ "/別名路徑/"
舉個例子:
若是如今你的DocumentRoot "/app/www" : 那麼站點的根目錄就是/app/www
此時在瀏覽器訪問http://192.168.23.4/users/index.html,那麼在服務器的文件系統上訪問的文件爲/app/www/users/index.html。
那麼若是指定一個別名:Alias /users/ "/app/www/username/"
那麼此時,在瀏覽器訪問http://192.168.23.4/users/index.html,那麼在服務器的文件系統上訪問的文件爲/app/www/username/index.html。
AddDefaultCharset UTF-8
1:訪問日誌
(1)訪問日誌的四種格式定義以下:
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:客戶端IP地址
%l:remote user,登入名,一般爲「-」號
%u:遠程用戶名,非登入時,爲-號
%t:服務器收到請求時的時間
%r:First line of request,表示請求報文的首行,首行記錄了:請求的方法,URL和http協議版本
%>s:響應的狀態碼
%b:不包含http首部的響應報文的大小,單位是字節
%{Referer}i:請求報文中首部「referer」的值,referer爲哪一個頁面的超連接跳轉至當前頁面的
%{User-Agent}i:請求報文中首部的「User-Agent」的值,User-Agent爲發出請求的命令程序
(2)指定訪問日誌保存在哪裏,選擇使用哪一種訪問日誌格式 CustomLog /logs/httpd/httpd_access_log combined