1、Centos7系統(tǒng)下實現(xiàn)httpd-2.4的安裝,并分別實現(xiàn)prefork、worker、event等幾種工作方式。
編譯安裝
# yum install -y httpd
程序環(huán)境配置文件
- 主配置文件:/etc/httpd/conf/httpd.conf
不想修改主配置文件,可通過新增/etc/httpd/conf.d/*.conf文件來完成配置
symtemd的服務(wù)文件 - /usr/lib/system/lsystemd/httpd.service
主程序文件: - /usr/sbin/httpd httpd-2.4 支持的MPM的動態(tài)切換;
日志文件: - /var/log/httpd;
- access_log; 訪問日志
- error_log; 錯誤日志
站點文檔 - /var/www/html ; 即幫助文件
模塊文件路徑 - /uar/lib64/httpd/modules
服務(wù)控制命令:
- systemctl enable | disable httpd.service 是否自動啟動
- systemctl { start | stop | restart | status } httpd.service 服務(wù)是否 開啟、停止、重啟、狀態(tài)
多處理模塊(MPM)
prefork:多進程模型,一個進程響應(yīng)一個請求;
worker:多進程多線程模型,一個線程響應(yīng)一個請求;
event:事件驅(qū)動模型,一個進程響應(yīng)n個請求;
分別啟用prefork、worker、event工作方式
默認開啟的狀態(tài)是prefork,一旦啟動/etc/sysconfig/httpd里的worker、event模式便自動切換.
1、開啟prefork模式
[root@localhost ~]# vim /etc/httpd/conf.modules.d/00-mpm.conf

重啟服務(wù)并且檢查語法:

2、啟動event模式
將LoadModule mpm_prefork_module modules/mod_mpm_prefork.so 禁用,并開啟 LoadModulempm_event_modulemodules/mod_mpm_event.so,如圖

重啟服務(wù)并檢查語法:

3、啟動worker模式,方法類似


2、簡述request報文請求方法和狀態(tài)響應(yīng)碼
request報文請求方法:
- GET:從服務(wù)器獲取一個資源
- POST:向服務(wù)器發(fā)送要處理的數(shù)據(jù)
- HEAD:只從服務(wù)器獲取文檔的響應(yīng)頭部
- DELETE:請求刪除服務(wù)器的某個資源
- PUT:把請求的主題存儲在服務(wù)器上
- TRACE:追蹤請求過程中所經(jīng)過的代理服務(wù)器
- OPTION:返回服務(wù)器對指定資源所支持使用的請求方法
狀態(tài)響應(yīng)碼
三位數(shù)字,如200,401,404,502等,標記請求處理當中發(fā)生的情況; 1xx:100-101,信息提示
2xx:200-206,成功
3xx:300-305,重定向
4xx:400-415,錯誤類信息,客戶端錯誤
5xx:500-505,錯誤類信息,服務(wù)端錯誤
常用狀態(tài)碼:
200:成功,請求的所有數(shù)據(jù)通過響應(yīng)報文的entity-body發(fā)送;OK
301:請求的URL指向的資源已經(jīng)被刪除;但在響應(yīng)報文中通過Location指明資源的新位置,Moved Permanently
302:與301類似,但在響應(yīng)報文通過Location指明的是資源所處的臨時新位置
304:客戶端發(fā)出了條件式請求,但服務(wù)器的資源未曾發(fā)生改變,則通過響應(yīng)此響應(yīng)狀態(tài)碼通知客戶端;Not Modified
401:需要輸入賬號和密碼認證方能訪問資源
403:請求被禁止;Forbbiden
404:請求的資源不存在;Not Found
500:服務(wù)器內(nèi)部錯誤;Internal Server Error
502:代理服務(wù)器從后端服務(wù)器收到一條偽響應(yīng);Bad Gateway
3、詳細描述httpd虛擬主機、站點訪問控制、基于用戶的訪問控制、持久鏈接等應(yīng)用配置實例"
3.1虛擬主機
一個物理服務(wù)器可以服務(wù)于多個站點,每個站點可通過一個或者多個虛擬主機來實現(xiàn);http三種類型的虛擬主機:基于ip、基于port、基于FQDN。
定義虛擬主機的方法:
<VirtualHost "IP:PORT">
ServerName
SeverAlias
DocumentRoot
</VirtualHost>
注意:大多數(shù)可用于全局或‘main’ server中的指令,都可以定義在VirtualHost中;
實例1:基于IP
<VirtualHost "192.168.1.103:80">
SerName www.ilinux.io
DocumentRoot "/data/web/ilinux"
</VirtualHost>
<VirtualHost "192.168.1.110:80">
SerName www.ilinux.io
DocumentRoot "/data/web/ilinux"
</VirtualHost>
注意:要在本機上配置上述兩個地址,并能實現(xiàn)網(wǎng)絡(luò)通信
實例2:基于Port
<VirtualHost "192.168.1.103:80">
SerName www.ilinux.io
DocumentRoot "/data/web/ilinux"
</VirtualHost>
Listen 10086
<VirtualHost "192.168.1.103:80">
SerName www.ilinux.io
DocumentRoot "/data/web/ilinux"
</VirtualHost>
注意:這里的所有端口都要被httpd監(jiān)聽
實例3:基于域名FQDN
<VirtualHost "192.168.1.103:80">
SerName www.ilinux.io
DocumentRoot "/data/web/ilinux"
</VirtualHost>
Listen 10086
<VirtualHost "192.168.1.103:80">
SerName www.ilinux.io
DocumentRoot "/data/web/ilinux"
</VirtualHost>
注意:額外經(jīng)常用于每個虛擬主機的配置有
- Errorlog
- Customlog
- <Directory>
- <Location>
- ServerAlias
3.2站點訪問控制
訪問控制機制:可以基于來源地址或者基于賬號進行控制;定義的方式有兩種:
文件系統(tǒng)路徑:
<Directory"/PATH/TO/SOMEDIR>
...
</Directory>
URL路徑:
<Location "URL">
...
</Location>
Directory中的訪問控制定義
(1)Options :定義訪問特性
Indexes:允許索引,指明的URL路徑不存在或沒有與主頁面資源相匹配的文件時,返回給用戶索引列表。
FollowSymLinks:允許跟蹤符號鏈接文件所指向的源文件。
None:禁止訪問
All:啟用除了MultiViews所有選項
定義格式:
允許索引,允許跟蹤符號鏈接文件
<Directory>
Options Indexes FollowSymLinks
</Directory>
禁止訪問設(shè)置
<Directory>
Options None
</Directory>
(2)基于來源地址訪問控制
order:檢查次序
Oder Allow Deny:只有明確allow的地址,才允許訪問,其他均為deny;
Allow from:允許訪問的所有地址
Deny from:拒絕訪問的來源地址
3.3基于用戶的訪問控制
生成用戶密碼文件:
使用htpasswd生成用戶密碼文件
格式為:htpasswd [-c][-m][-D]passwdfile username,分別生成tom,jerry,Obama用戶。

編輯/etc/httpd/conf.d/admin.conf,內(nèi)容如下:

編輯/etc/httpd/conf.d/.htgroup,寫入如下內(nèi)容

完成后,打開瀏覽器,輸入ip+admin即可完成基于組的認證,用戶認證省略定義組用戶,相對簡單,這里不做演示。
3.4持久鏈接相關(guān)配置
持久鏈接:鏈接建立后,每個資源獲取結(jié)束后不會斷開鏈接,而是繼續(xù)
等待其他資源請求并完成傳輸;但是總歸要斷開的,如何斷開呢?我們可以通過限制鏈接請求數(shù)量或者限制時間,超時即斷開鏈接。
劣勢:對并發(fā)訪問量較大的服務(wù)器,開持久會使有些請求得不到服務(wù);
改進:縮短時間,httpd-2.4支持毫秒級
非持久鏈接:每個資源都是單獨通過專用的鏈接獲取
持久鏈接相關(guān)參數(shù):
KeepAlive Off|On
MaxKeepAliveRequests 100
KeepAliveTimeout 15
可以通過Telnet命令來進行持久鏈接測試:
telnet Sever 80
GET /URL HTTP/1.1
Host:Server
在超過15秒后沒用操作自動斷開鏈接