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的工作模式。可以设置的工作模式有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.178linux.com/91455
评论列表(2条)
总结的比较全面,如果能加上实战部分,会更好一点~加油~
@马哥教育:谢谢老师!