1、Centos7系統下實現httpd-2.2的安裝,并分別實現prefork、worker、event等幾種工作方式
編譯安裝httpd-2.2.32.tar.gz
yum groupinstall -y “Development Tools”
tar xf httpd-2.2.32.tar.gz
mkdir /usr/local/httpd
cd httpd-2.2.32
./configure –prefix=/usr/local/httpd –with-mpm=prefork
//可以在編譯時通過–with-mpm選項來指定httpd的工作模式??梢栽O置的工作模式有prefork、worker、event。其中,默認為prefork模式,不用此選項就會工作在此模式下。
注:MPM:Multipath processing Modules (多路處理模塊)
- prefork:多進程模型,每個進程響應一個請求;一個主進程負責生成子進程及回收子進程;負責創建套接字;負責接收請求,并將其派發給某子進程進行處理;n個子進程每個子進程處理一個請求;工作模型是會預先生成幾個空閑進程,隨時等待用于響應用戶請求;最大空閑和最小空閑;
- worker:多進程多線程模型,每線程處理一個用戶請求;一個主進程負責生成子進程;負責創建套接字;負責接收請求,并將其派發給某子進程進行處理;多個子進程每個子進程負責生成多個線程;每個線程負責響應用戶請求;并發響應數量:m*n,m表示子進程數量,n表示每個子進程所能創建的最大線程數量;
- event:事件驅動模型,多進程模型,每個進程響應多個請求;一個主進程負責生成子進程;負責創建套接字;負責接收請求,并將其派發給某子進程進行處理;子進程基于事件驅動機制直接響應多個請求;
2、簡述request報文請求方法和狀態響應碼
- request報文語法格式:
<method> <request-URL> <version>
<HEADERS>
- method(方法):
GET:從服務器獲取一個資源;
HEAD:只從服務器獲取文檔的響應首部;
POST:向服務器發送要處理的數據;
PUT:將請求的主體部分存儲在服務器上;
DELETE:請求刪除服務器上指定的文檔;
TRACE:追蹤請求到達服務器中間經過的代理服務器;
OPTIONS:請求服務器返回對指定資源支持使用的請求方法;
- status(狀態碼):
1xx:100-101, 信息提示;
2xx:200-206, 成功
3xx:300-305, 重定向
4xx:400-415, 錯誤類信息,客戶端錯誤
5xx:500-505, 錯誤類信息,服務器端錯誤
- 常用的狀態碼:
200: 成功,請求的所有數據通過響應報文的entity-body部分發送;OK
301: 請求的URL指向的資源已經被刪除;但在響應報文中通過首部Location指明了資源現在所處的新位置;Moved Permanently
302: 與301相似,但在響應報文中通過Location指明資源現在所處臨時新位置; Found
304: 客戶端發出了條件式請求,但服務器上的資源未曾發生改變,則通過響應此響應狀態碼通知客戶端;Not Modified
401: 需要輸入賬號和密碼認證方能訪問資源;Unauthorized
403: 請求被禁止;Forbidden
404: 服務器無法找到客戶端請求的資源;Not Found
500: 服務器內部錯誤;Internal Server Error
502: 代理服務器從后端服務器收到了一條偽響應;Bad Gateway
3、詳細描述httpd虛擬主機、站點訪問控制、基于用戶的訪問控制、持久鏈接等應用配置實例
注:這里基于CentOS7的httpd2.4版本rpm包進行安裝配置
- httpd虛擬主機配置
虛擬主機可以基于IP、端口、FQDN三種方式進行工作
基于IP
mkdir -pv /data/www/html/{ilinux,iunix}
vim /data/www/html/ilinux/index.html
ilinux Test Page
vim /data/www/html/iunix/index.html
iunix Test Page
ip addr add 192.168.1.114/24 dev eno16777736
ip addr list
//現在主機有兩個IP地址,一個是192.168.1.113,一個是192.168.1.114
vim /etc/httpd/conf.d/vhosts.conf
<VirtualHost 192.168.1.113:80>
ServerName www.ilinux.com
DocumentRoot /data/www/html/ilinux
<Directory “/data/www/html/ilinux”>
Options none
AllowOverride none
Require all granted
</Directory>
CustomLog logs/ilinux_access_log combined
ErrorLog logs/iinux_error_log
</VirtualHost>
<VirtualHost 192.168.1.114:80>
ServerName www.iunix.com
DocumentRoot “/data/www/html/iunix”
<Directory “/data/www/html/iunix”>
Options none
AllowOverride none
Require all granted
</Directory>
CustomLog logs/iunix_access_log combined
ErrorLog logs/iunix_error_log
</VirtualHost>
基于端口
vim /etc/httpd/conf.d/vhosts.conf
Listen 8080
<VirtualHost 192.168.1.113:80>
ServerName www.ilinux.com
DocumentRoot /data/www/html/ilinux
<Directory “/data/www/html/ilinux”>
Options none
AllowOverride none
Require all granted
</Directory>
CustomLog logs/ilinux_access_log combined
ErrorLog logs/iinux_error_log
</VirtualHost>
<VirtualHost 192.168.1.113:8080>
ServerName www.iunix.com
DocumentRoot “/data/www/html/iunix”
<Directory “/data/www/html/iunix”>
Options none
AllowOverride none
Require all granted
</Directory>
CustomLog logs/iunix_access_log combined
ErrorLog logs/iunix_error_log
</VirtualHost>
基于FQDN
vim /etc/httpd/conf.d/vhosts.conf
<VirtualHost 192.168.1.113:80>
ServerName www.ilinux.com
DocumentRoot /data/www/html/ilinux
<Directory “/data/www/html/ilinux”>
Options none
AllowOverride none
Require all granted
</Directory>
CustomLog logs/ilinux_access_log combined
ErrorLog logs/iinux_error_log
</VirtualHost>
<VirtualHost 192.168.1.113:80>
ServerName www.iunix.com
DocumentRoot “/data/www/html/iunix”
<Directory “/data/www/html/iunix”>
Options none
AllowOverride none
Require all granted
</Directory>
CustomLog logs/iunix_access_log combined
ErrorLog logs/iunix_error_log
</VirtualHost>
- 站點訪問控制
vim /etc/httpd/conf/httpd.conf
DocumentRoot “/data/web/www”
<Directory “/data/web/www”>
Require all granted //允許所有人訪問
</Directory>
systemctl restart httpd
vim /etc/httpd/conf/httpd.conf
<Directory “/data/web/www”>
<Requireall>
Require not ip 192.168.1.107 //拒絕一個地址訪問
Require ip 192.168 //允許網段訪問
</Requireall> </Directory>
httpd -t
systemctl restart httpd
- 基于用戶的訪問控制
htpasswd -c /tmp/test.users tom
//生成一個用戶名叫tom的加密文件叫test.users,文件中用冒號隔開了用戶名和密碼。這條命令輸入后還加輸入兩次密碼。只有第一次創建文件時才用-c選項。
htpasswd /tmp/test.users jerry
//再在test.users文件中加一個叫jerry的用戶,也可以用-m選項,表示md5
htpasswd -b /tmptest.users obama 123456
//用-b選項指明添加用戶名叫obama,密碼是123456
mv /tmp/test.users /etc/httpd/conf.d/.htpasswd
mkdir /data/web/www/admin
vim /data/web/www/admin/index.html
Admin Area
訪問IP/admin
vim /etc/httpd/conf.d/admin.conf
<Directory “/data/web/www”>
Options None
AllowOverride None
AuthType basic
AuthName “Admin Area,Please enter username and password”
AuthUserFile “/etc/httpd/conf.d/.htpasswd”
Require user jerry obama
//這里如果改為Require valid-user表示所有用戶都可登錄。2.2與2.4版本在這里一樣,都用Require user選項。
</Directory>
httpd -t
systemctl restart httpd
訪問IP/admin,需要認證了
vim /etc/httpd/conf.d/.htgroup //這次用組的方式登錄
animals: tom jerry
//創建一個組,名稱叫animals,用戶有tom和jerry。這個用戶一定要是創建過的賬號
vim /etc/httpd/conf.d/admin.conf
<Directory “/data/web/www/admin”>
Options None
AllowOverride None
AuthType basic
AuthName “Admin Area,Please enter username and password”
AuthUserFile “/etc/httpd/conf.d/.htpasswd”
AuthGroupFile “/etc/httpd/conf.d/.htgroup”
Require group animals
</Directory>
- 持久鏈接
vim /etc/httpd/conf.d/keepalive.conf
KeepAlive On
KeepAliveTimeout 30
MaxKeepAliveRequests 100
vim /var/www/html/index.html
CentOS7 Test Page
systemctl start httpd
telnet 192.168.1.15 80
GET /index.html HTTP/1.1
Host: 192.168.1.15
//可以通過telnet命令進行測試,如果未開啟持久連接功能,當請求完資源后,會立即退出。而將開啟持久連接時,會按照配置文件設置,到邊超時時間或大于請求數量時才會退出。
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/91455
總結的比較全面,如果能加上實戰部分,會更好一點~加油~
@馬哥教育:謝謝老師!