浙江11选5吧:Linux基礎教程之HTTP相關配置解讀

一次完整的HTTP請求處理過程:
1、建立連接:接收或拒絕鏈接請求
2、接受請求:接收客戶端請求報文中對某資源的一次請求的過程
Web訪問響應模型(Web I/O)
單進程I/O模型:啟動一個進程處理用戶請求,而且一次只處理一個,多個請
求被串行響應;
多進程I/O模型:并行啟動多個進程,每個進程響應一個鏈接請求;
復用I/O結構:啟動一個進程,同時響應N個鏈接請求;
實現方法:多線程模型和事件驅動;
多線程模型:一個進程生成N個線程,每線程響應一個連接請求;
事件驅動:一個進程處理N個請求。
復用的多進程I/O模型:啟動M個進程,每個進程響應N個連接請求,同時接收
M*N個請求。
?

浙江11选5任3遗漏 www.ehxis.com 3、處理請求:

服務器對請求報文進行解析,并獲取請求的資源及請求方法

等相關信息,根據方法,資源,首部和可選的主體部分對請求進行處理
元數據:請求報文首部
<method> <URL> <VERSION>
HEADERS 格式 name:value
<request body>
示例:
Host : 浙江11选5任3遗漏 www.ehxis.com 請求的主機名稱
Server: Apache/2.4.7
HTTP常用請求方式,Method GET、POST、HEAD、PUT、DELETE、

TRACE、OPTIONS

4、訪問資源:
服務器獲取請求報文中請求的資源web服務器,即存放了 web資源的服
務器,負責向請求者提供對方請求的靜態資源,或 動態運行后生成的資
源 。
資源放置于本地文件系統特定的路徑:
DocRoot –> /var/www/html
/var/www/html/images/logo.jpg
//www.ehxis.com/images/logo.jpg
web服務器資源路徑映射方式:
(a) docroot
(b) alias
(c) 虛擬主機docroot
(d) 用戶家目錄docroot
?
5、構建響應報文:
一旦Web服務器識別除了資源,就執行請求方法中描述的動作,并返回響應報文。響應報文中包含有響應狀態碼、響應首部,如果生成了響應主體的話,還包括響應主體。
1)響應實體:如果事務處理產生了響應主體,就將內容放在響應報文中回送過去。響應報文中通常包括: 描述了響應主體MIME類型的Content-Type首部描述了響應主體長度的Content-Length 實際報文的主體內容
2)URL重定向:web服務構建的響應并非客戶端請求的資源 ,而是資源另外一個訪問路徑:
永久重定向://www.360buy.com
臨時重定向://www.taobao.com
3)MIME類型:
Web服務器要負責確定響應主體的MIME類型。有很多配置服務器的方法可以將MIME類型與資源管理起來 ;
魔法分類:Apache web服務器可以掃描每個資源的內容,并將其與一個已知模式表(被稱為魔法文件)進行匹配,以決定每個文件的MIME類型。這樣做可能比較慢,但很方便,尤其是文件沒有標準擴展名的時候;
顯式分類:可以對Web服務器進行配置,使其不考慮文件的擴展名或內容,強制特定文件或目錄內容擁有某個MIME類型。
類型協商: 有些Web服務器經過配置,可以以多種文檔格 式來存儲資源。在這種情況下,可以配置Web服務器,使其可 以通過與用戶的協商來決定使用哪種格式(及相關的MIME類型 )”最好”

6、發送響應報文

Web服務器通過連接發送數據時也會面臨與接收數據一 樣的問題。服務器可能有很多條到各個客戶端的連接,有些是空 閑的,有些在向服務器發送數據,還有一些在向客戶端回送響應 數據。服務器要記錄連接的狀態,還要特別注意對持久連接的處 理。對非持久連接而言,服務器應該在發送了整條報文之后,關 閉自己這一端的連接。對持久連接來說,連接可能仍保持打開狀 態,在這種情況下,服務器要正確地計算Content-Length首部 ,不然客戶端就無法知道響應什么時候結束了

7、記錄日志?

最后,當事務結束時,Web服務器會在日志文件中添加 一個條目,來描述已執行的事務

?
HTTPD介紹:
特性:
高度??榛?core+modules
DSO:Dynamic Shared Object 動態加/卸載
MPM:multi-processing module 多路處理???/span>
MPM工作模式:
prefork:多進程I/O模型,每個進程響應一個請求,默認模型 。
一個主進程:生成和回收n個子進程,創建套接字,不響應請求
多個子進程:工作work進程,每個子進程處理一個請求;系統初始 時,預先生成多個空閑進程,等待請求,最大不超過1024個 。
worker:復用的多進程I/O模型,多進程多線程,IIS使用此模型 。
一個主進程:生成m個子進程,每個子進程負責生成n個線程,每個 線程響應一個請求,并發響應請求:m*n
event:事件驅動模型(worker模型的變種)
一個主進程:生成m個子進程,每個進程直接響應n個請求,并發響 應請求:m*n,有專門的線程來管理這些keep-alive類型的線程,當有 真實請求時,將請求傳遞給服務線程,執行完畢后,又允許釋放。這樣 增強了高并發場景下的請求處理能力 。
httpd-2.2: event 測試版, centos6默認
httpd-2.4:event 穩定版,centos7默認
?
HTTPD安裝
版本:centos6:2.2
centos7:2.4
安裝方式:
rpm:centos發行版,穩定,建議使用
編譯:定制或特殊需求
Centos 6程序環境:httpd-2.2
配置文件:
/etc/httpd/conf/httpd.conf
/etc/httpd/conf.d/*.conf
檢查配置語法:

????????????httpd -t

? ? ? ? ? ??service httpd configtest

? ????進行語法檢測時,會報錯,雖然沒有影響,但是也不好看;解決方法:

? ? ? ? ? ? 方法一:

? ? ? ? ? ? ? ? ? ? ? ?

方法二: vim /etc/hosts ?進行本地地址解析

? ? ?

服務腳本:/etc/rc.d/init.d/httpd

腳本配置文件:/etc/sysconfig/httpd
服務控制和啟動:
chkconfig httpd on|off
service {start|stop|restart|status|configtest|reload} httpd
站點網頁文檔根目錄: /var/www/html

??槲募肪叮?

/etc/httpd/modules

/usr/lib64/httpd/modules
?
主程序文件:
/usr/sbin/httpd
/usr/sbin/httpd.worker
/usr/sbin/httpd.event
主進程文件: /etc/httpd/run/httpd.pid
/var/run/httpd/httpd.pid
日志文件目錄:
/var/log/httpd
access_log: 訪問日志
error_log:錯誤 日志

幫助文檔包:

? ? ? ? ? ? httpd-manual

? ??? 如果上不了網時,可以手動安裝文檔包,進行查看

Httpd 2.2常見配置
??槲募肪叮?/span>
/usr/lib64/httpd/modules
httpd配置文件的組成:
# grep “Section” /etc/httpd/conf/httpd.conf 主配置文件
### Section 1: Global Environment 全局環境匹配
### Section 2: ‘Main’ server configuration 主服務的的配置
### Section 3: Virtual Hosts 虛擬主機配置

配置格式:

directive + value 指令 + 值

directive: 不區分字符大小寫

value: 為路徑時,是否區分大小寫,取決于文件系統

下面先介紹一個小實驗,再介紹HTTPD的基本配置:

??

在客戶端機器連接服務器時,顯示出Apache版本信息,不安全。

? ? ? ?編輯HTTPD主配置文件,加上下面一行就可以了

? ? ? #vim /etc/httpd/conf/httpd.conf

? ? ? ?ServerTokens productonly(可以簡寫prod)

? ? ? ? ??service restart httpd

?

HTTPD基本配置及用法:

1、切換工作模式:
vim /etc/sysconfig/httpd
HTTPD=/usr/sbin/httpd.worker
2、修改監聽的IP和Port
Listen [IP:]PORT

(1) 省略IP表示為0.0.0.0;表示監聽本機所有IP;
(2) Listen指令可重復出現多次
Listen 80
Listen 8080
(3) 修改監聽socket,重啟服務進程方可生效
4、MPM( Multi-Processing Module)多路處理???:
prefork, worker, event(試驗階段)

httpd-2.2不支持同時編譯多個???,所以只能編譯時選定一個;rpm安裝的包提供三個二進制程序文件,

分別用于實現對不同MPM機制的支持

確認方法:
ps aux | grep httpd
默認為/usr/sbin/httpd, 即prefork模式
查看靜態編譯的???:httpd -l
查看靜態編譯及動態裝載的???:httpd –M
動態??榧釉兀翰恍柚仄艏瓷?/span>
動態??槁肪?:/usr/lib64/httpd/modules/
更換使用的httpd程序:
vim /etc/sysconfig/httpd
HTTPD=/usr/sbin/httpd.worker
重啟服務生效
httpd.worker -l 查看
pstree -p |grep httpd 查看進程和線程
測試:yum install httpd-tools
ab -c 1000 -n 10000?//192.168.164.129/
?
?

prefork的默認配置:

<IfModule?prefork.c>
StartServers 8 開機啟動時,默認開啟8個進程
MinSpareServers 5 最小空閑進程
MaxSpareServers 20 最大空閑進程
ServerLimit 256 最多進程數,最大20000
MaxClients 256 最大并發

MaxRequestsPerChild 4000 子進程最多能處理的請求 數量。在處理MaxRequestsPerChild 個請求之后,

子進程將 會被父進程終止,這時候子進程占用的內存就會釋放(為0時 永遠不釋放)

</IfModule>
?
worker的默認配置:
<IfModule?worker.c>
StartServers 4 開機啟動時,默認開啟4個進程
MaxClients 300 最大支持多少客戶端并發訪問
MinSpareThreads 25 最小的空閑線程
MaxSpareThreads 75 最大的空閑線程
ThreadsPerChild 25 每個子進程生成的線程數量
MaxRequestsPerChild 0 無限制
</IfModule>
5、DSO: Dynamic Shared Object 動態共享對象
加載動態??榕渲?
/etc/httpd/conf/httpd.conf
配置指令實現??榧釉馗袷劍?/span>
LoadModule <mod_name> <mod_path>
??槲募肪犢墑褂孟嘍月肪叮?/span>
相對于ServerRoot(默認/etc/httpd)指向的路徑而言:
/etc/httpd/modules/

示例:要使用某個某塊,需按照下面格式,加載到主配置文件里即可:

? ?LoadModule auth_basic_module modules/mod_auth_basic.so

6、定義’Main’ server的文檔頁面路徑 :
DocumentRoot “/path”?網站主頁目錄
文檔路徑映射:
DocumentRoot指向的路徑為URL路徑的起始位置

下面先介紹一下,什么是URL:

URL組成
<scheme>://<user>:<password>@<host>:<port>/<path>;<params> ?<query>#<frag>
schame:方案,訪問服務器以獲取資源時要使用哪種協議
user:用戶,某些方案訪問資源時需要的用戶名
password:密碼,用戶對應的密碼,中間用:分隔
Host:主機,資源宿主服務器的主機名或IP地址
port:端口,資源宿主服務器正在監聽的端口號,很多方案有默認端口號
path:路徑,服務器資源的本地名,由一個/將其與前面的URL組件分隔
params:參數,某些方案用這個組件來指定輸入的參數,參數為名/值對,
URL中可多含多個參數,用;分隔 .
query:查詢,某些方案會用這個組件傳遞參數以激活程序,如數據庫,用
?分隔,多個查詢用&分隔
frag:片段,一小片或一部分資源的名字,此組件在客戶端使用,用#分隔

好了,通過以上已經了解了什么事URL了,下面介紹怎么設置主頁等相關操作:

實驗:更改HTTPD主頁;實驗環境在centos6.9主機上搭建的HTTPD服務,

? ? ? ? ? (主機IP:192.168.164.129)

? ? ? ? 首先自定義一個主頁目錄以及文件:

#vim /etc/httpd/conf/httpd.conf
DocumentRoot “/app/website1”
#service httpd reload

訪問測試:

? ? ? ? ?如果以上自定義的主頁文件不存在時,會出現以下情景:

默認情況下,會在/var/www/html目錄下找index.html這個主頁文件,如果找不到,則顯示下圖主頁。
DirectoryIndex index.html index.html.var
Include conf.d/*.conf
下圖主頁文件:/etc/httpd/conf.d/welcome.conf

? 如果welcome.conf這個文件也找不到,會出現下圖的情景:

?cd /etc/httpd/conf.d

? ? ? ? ?mv welcome.conf welcome.conf.bak

如果把主配置文件里的主頁目錄再改回去,

cd /var/www/html/
mv index.html b.html

下圖把主頁目錄下的文件都列出來了,不安全
vim /etc/httpd/conf/httpd.conf
Option -Indexes FollowSymLinks
service httpd reload
?

下圖中,再次訪問網站時,主目錄下的文件就顯示不了,變得安全點。

注意:SELinux和iptables的狀態
7、站點訪問控制常見機制
可基于兩種類型的路徑指明對哪些資源進行何種訪問控制
訪問控制機制有兩種:客戶端來源地址,用戶賬號
文件系統路徑:
<Directory “/path “>
</Directory>
<File “/path/file”>
</File>
<FileMatch “PATTERN”>
</FileMatch>
URL路徑:
<Location ” ” >
</Location>
<LocationMatch ” “>
….
</LocationMatch>
示例:
<FilesMatch “\.(gif|jpe?g|png)$”>
<Files “?at.*”> 通配符
<Location /status>
<LocationMatch “/(extra|special)/data”>
訪問控制機制:
基于來源地址
基于賬號
Directory中“基于來源地址”實現訪問控制
(1)Options: 后跟1個或多個以空白字符分隔的選項列表 在選項前的
+,- 表示增加或刪除指定選項
所有可用特性:Indexes Includes FollowSymLinks
SymLinksifOwnerMatch ExecCGI MultiViews
常見選項:
Indexes:指明的URL路徑下不存在與定義的主頁面資源相符的資源
文件時,返回索引列表給用戶 。沒寫時默認是不開啟的。

?
FollowSymLinks:允許訪問主頁目錄下的符號鏈接文件所指向的源文
件 ;沒寫時默認是開啟的。
None:全部禁用
All: 全部允許

(2) AllowOverride

與訪問控制相關的哪些指令可以放在指定目錄下的?.htaccess(由
AccessFileName指定)文件中,覆蓋之前的配置指令
只對<directory>語句有效
AllowOverride All: 所有指令都有效
AllowOverride None: .htaccess 文件里定義的策略無效
AllowOverride AuthConfig Indexes 除了AuthConfig 和
Indexes的其它指令都無法覆蓋

? 示例:實現AllowOverride ,基于指定目錄.htaccess,以及FollowSymlinks的用法

? ? ? ? ?# vim /etc/httpd/conf/httpd.conf

 

touch /app/website1/.htaccess

? 訪問測試,訪問軟鏈接,直接指向源文件的內容。

?
?
?
?
?
(3)基于來源地址的訪問控制機制
Order:定義生效次序;寫在最后面的表示默認法則
Order allow,deny ? ?:默認拒絕
Order deny,allow ? ?:默認允許

Allow from?

?Deny from

來源地址:IP
NetAddr: 172.16
172.16.0.0

172.16.0.0/16

具體用法:下圖中定義了order allow,deny先允許,后拒絕;根據法則后定義的生效

? ? #curl ?http://192.168.164.29 ??是被拒絕訪問的

? ? ?

8、定義默認主頁面
DirectoryIndex index.html inex.html.var
9、日志設定
日志類型:
訪問日志 錯誤日志
錯誤日志:
ErrorLog logs/error_log
LogLevel warn?定義日志級別,默認值warn
loglevel 可選值: debug, info, notice, warn,error crit, alert, emerg
訪問日志: /var/log/httpd/access_log
定義日志格式:LogFormat format strings
LogFormat “%h %l %u %t \”%r\” %>s %b \”%{Referer}i\” \”%
{User-Agent}i\”” combined
使用日志格式: CustomLog logs/access_log combined
參考幫助: //httpd.apache.org/docs/2.2/mod/mod_log_config
.html#formats
%h 客戶端IP地址
%l 遠程用戶,啟用mod_ident才有效,通常為減號“-”
%u 驗證(basic,digest)遠程用戶,非登錄訪問時,為 一個減號“-”
%t 服務器收到請求時的時間
%r First line of request,即表示請求報文的首行;記錄了 此次請求
的“方法”,“URL”以及協議版本
%>s 響應狀態碼
%b 響應報文的大小,單位是字節;不包括響應報文http首部
%{Referer}i 請求報文中首部“referer”的值;即從哪個頁 面中的超鏈接跳
轉至當前頁面的
%{User-Agent}i 請求報文中首部“User-Agent”的值;即 發出請求的應
用程序
?
?
10、定義路徑別名
格式: Alias /URL/ ?“/PATH/”
DocumentRoot “/www/htdocs”
//www.ehxis.com/download/bash.rpm
==>/www/htdocs/download/bash.rpm

Alias /download/ ? ?“/rpms/pub/”

//www.ehxis.com/download/bash.rpm
==>/rpms/pub/bash.rpm

//www.ehxis.com/images/logo.png

==>/www/htdocs/images/logo.png

注意:以上紅色字體標識,是一一對應的,注意/路徑和別名的區分。

?
11、設定默認字符集
AddDefaultCharset UTF-8
中文字符集:GBK, GB2312, GB18030
?
12、基于用戶的訪問控制
認證質詢:WWW-Authenticate:響應碼為401,拒絕客戶端請求,并說明要求客戶端提供賬號和密碼
認證:Authorization:客戶端用戶填入賬號和密碼后再次發送請求報文;認證通過時,則服務器發送響應的資源
認證法式兩種:
basic:明文–不安全,可以基于https訪問
digest:消息摘要認證,兼容性差
安全域:需要用戶認證后方能訪問的路徑;應該通過名稱對其進行標識,
以便告知用戶認證的原因
用戶的賬號和密碼
虛擬賬號:僅用于訪問某服務時用到的認證標識
存儲:文本文件,SQL數據庫,ldap目錄存儲,nis等
?
basic認證配置示例:
(1) 定義安全域
<Directory “/path”>
Options None
AllowOverride None 是否允許驗證.htaccess文件
AuthType Basic 認證類型
AuthName “String” 管理目錄提示語句
AuthUserFile “/PATH/HTTPD_USER_PASSWD_FILE”
驗證配置文件
Require user username1 username2 …
指定用戶
</Directory>
允許賬號文件中的所有用戶登錄訪問: Require valid-user
(2) 提供賬號和密碼存儲(文本文件)
使用專用命令完成此類文件的創建及用戶管理
htpasswd命令來源于httpd-tools包
htpasswd?[options] /PATH/HTTPD_PASSWD_FILE username
-c:自動創建文件,僅應該在文件不存在時使用
-m:md5格式加密
-s:sha格式加密
-D:刪除指定用戶
?

實驗:基于用戶賬號密碼認證的訪問控制;

實驗環境在centos6.9上搭建httpd服務,(192.168.8.128)

基于安全考慮可以設置嚴格的權限:
chmod 600 /etc/httpd/conf.d/.husers
setfacl -m u:apache:r /etc/httpd/conf.d/.husers
針對主頁目錄進行配置:

也可以定義在.htaccess文件里:

vim /etc/httpd/conf/httpd.conf

#?cd /app/website1/admin
vim .htaccess

基于組賬號進行認證
(1) 定義安全域
<Directory “/path”>
AuthType Basic
AuthName “String“
AuthUserFile “/PATH/HTTPD_USER_PASSWD_FILE”
AuthGroupFile “/PATH/HTTPD_GROUP_FILE
Require group grpname1 grpname2 …
</Directory>
(2) 創建用戶賬號和組賬號文件;
組文件:每一行定義一個組
GRP_NAME: username1 username2 …

實驗:基于用戶組的安全認證,在上個實驗基礎上實現

?
1、創建組文件
#vim /etc/httpd/conf.d/.htgroups
g1:httpuser1 httpuser2
g2:httpuser3
2、定義安全域
cd /app/website1/admin
vim .htaccess

字符瀏覽器測試:在另一臺機器上測試
links 192.168.8.128/admin
遠程客戶端和用戶驗證的控制
Satisfy ALL|Any
ALL 客戶機IP和用戶驗證都需要通過才可以
Any客戶機IP和用戶驗證,有一個滿足即可

示例:?

Require valid-user

Order allow,deny
Allow from 192.168.1
Satisfy Any
14、虛擬主機
站點標識: socket
IP相同,但端口不同
IP不同,但端口均為默認端口
FQDN不同;
請求報文中首部
Host: 浙江11选5任3遗漏 www.ehxis.com
有三種實現方案:
基于ip:為每個虛擬主機準備至少一個ip地址 ;
基于port:為每個虛擬主機使用至少一個獨立的port;
基于FQDN:為每個虛擬主機使用至少一個FQDN
注意:一般虛擬機不要與main主機混用;因此,要使用虛擬主機, 一般
先禁用main主機
禁用方法:注釋中心主機的DocumentRoot指令即可
虛擬主機的配置方法:
<VirtualHost IP:PORT>
ServerName FQDN
DocumentRoot “/path”
</VirtualHost>
建議:上述配置存放在獨立的配置文件中
其它可用指令:
ServerAlias:虛擬主機的別名;可多次使用
ErrorLog: 錯誤日志
CustomLog:訪問日志
<Directory “/path”> </Directory>
Alias
?
實驗1:基于IP的虛擬主機
a、準備環境,創建多個主頁文件,并為網卡配置多個IP地址
? ? ? ? ? ip addr add 192.168.8.130/24 dev eth0 label eth0:1

b、虛擬主機配置文件設置:
cd /etc/httpd/conf.d
vim vhosts.conf

c、在另一臺客戶端機器上進行驗證
2、基于端口的虛擬主機:

3、基于FQDN的虛擬主機

15、status頁面
幫助我們實現http服務器的一些功能狀態的查看,以頁面的方式查看他的工作情況:進程編號,負載狀態。
vim /etc/httpd/conf/httpd.conf
LoadModule status_module modules/mod_status.so

要想實現status功能,??楸匭爰釉?。

可以在虛擬機設置里面定義,也可以單獨定義在conf.d目錄下。

<Location /server-status>
SetHandler server-status
Order allow,deny
Allow from 172.16
</Location>
ExtendedStatus On 顯示擴展信息

相關新聞

聯系我們

400-080-6560

在線咨詢:點擊這里給我發消息

郵件:[email protected]

工作時間:周一至周日,09:00-18:30

QR code