HTTPD

  • 一次完整http請求過程(必須掌握)




1)當用戶在瀏覽器輸入一個URL,且回車,會先進行DNS解析請求
2)客戶端拿到DNS解析請求返回的IP以後,去請對應的服務器站點的資源
3)服務器端判斷是否接受請求,若是接收請求,會對請求報文進行解析,分析請求報文的請求頭信息,分析請求頭的請求資源
4)服務器端對請求頭的請求資源進行解析以後,構建響應頭和響應體,組合爲響應報文
5)服務端發送響應報文給客戶端,服務端在本地記錄http對應的日誌信息
6)客戶端解析響應報文
  • http服務器程序類型





(1)httpd(Apache)
(2)nginx
(3)lighted
(4)IIS
(5)tomcat
(6)Tengine
...
基於紅帽6RPM包安裝的httpd2.2版本、基於紅帽7RPM包安裝的httpd2.4版本

  • httpd2.2軟件配置說明
配置文件: 
/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
  • httpd2.4軟件配置說明
配置文件
/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 #檢查下配置文件的語法是否錯誤
3)在全局配置段,能夠修改其監聽的端口, 修改監聽的端口以後,只有重啓服務才能生效,reload不能生效,只能restart
Listen 80 能夠改成:Listen 8000


配置文件詳細介紹(超級重要必須掌握)

  • 1:設置監聽的端口(很重要)
在全局配置段,能夠修改其監聽的端口, 修改監聽的端口以後,只有重啓服務才能生效,reload不能生效,只能restart
Listen 80 能夠改成:Listen 8000
  • 2:持久鏈接
因爲web服務的鏈接是:基於一個TCP的虛鏈接,http事務可重複執行屢次。例如咱們打開https://www.taobao.com,首先返回的是首頁的HTML骨架資源,再返回的是CSS級聯樣式表資源,最後返回的是JavaScript代碼資源。TCP鏈接創建後,每一個資源獲取完成後不全斷開鏈接,而是繼續等待其餘資源請求的進行

KeepAlive On 或 Off :設置TCP保持鏈接關閉或開啓
KeepAliveTimeout 15 :設置保持鏈接的超時時長
MaxKeepAliveRequests 100 : 設置最大保持鏈接數量
  • 3:MPM機制(多處理模塊機制)(很重要)
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>


  • 4:啓用或禁用模塊(DSO)(很重要)
LoadModule <模塊名> <模塊相對路徑>
例如:LoadModule auth_basic_module modules/mod_auth_basic.so
這裏的auth_basic_module是模塊名,modules/mod_auth_basic.so是模塊文件的路徑,若是模塊前面沒有路徑,表示啓用相關模塊
模塊的徹底路徑是:/etc/httpd/modules/*

  • 5:定義中心主機(重要)
指定DocumentRoot(這是中心主機的站點根目錄,中心主機的根站點目錄能夠更換)
例如:DocumentRoot "/var/www/html"
能夠修改成其餘的路徑:DocumentRoot "/app/www"
  • 6:站定訪問控制 
    • 基於兩種機制指明對哪些資源進行何種的訪問控制
1:基於文件系統路徑的訪問控制
<Directory "/var/www/html">
這樣的訪問控制代表,對於/var/www/html目錄下的全部的文件均有效
</Directory>

<File "某文件路徑">
這樣的訪問控制代表,對於某文件路徑有效
</File>

<FileMatch "模式匹配">
這樣的訪問控制代表,對於被模式匹配到的文件有效
</FileMatch>

2:基於URL的訪問控制
# 顯示httpd服務器的狀態信息,這樣的訪問控制代表,對於訪問http://ip:port/server-status都生效
<Location /server-status>
SetHandler server-status
Order deny,allow
#Deny from all
Allow from all
</Location>

# 顯示httpd軟件信息,這樣的訪問控制代表,LocationMatch中指定的URL的效用
<LocationMatch "URL">
......
</LocationMatch>

  • 7:Directory訪問控制中指令詳解
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主機訪問。

  • 8:定義站點的默認主頁面
DirectoryIndex index.html index.html.var
若是在站點根目錄沒有index.html,那麼直接在瀏覽器輸入域名就會返回Apache的首頁信息
  • 9:給路徑取別名
定義格式爲: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。

  • 10:設定默認字符集
AddDefaultCharset UTF-8
  • 11:設定日誌的保存級別日誌
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
相關文章
相關標籤/搜索