- Centos7系统下实现httpd-2.2的安装,并分别实现prefork、worker、event等几种工作方式
- CentOS7安装开发环境
yum –y install “Development Tools”
- 下载源码的httpd-2.2.8
- 编译安装httpd-2.2.8
- 切换到httpd-2.2.8目录
- ./configure –prefix=/usr/local/httpd
- Make
- Make install
- 创建启动文件
- 在/etc/rc.d/init.d/
- ln /usr/local/httpd/bin/apachectl httpd
- vi httpd ## 添加#chkconfig: 345 90 10
- chkconfig –add httpd
- 用systemctl start httpd.service测试
- 添加命令到环境变量
PATH=$PATH:/usr/local/httpd/bin
Prefork模型的httpd安装成功
- 分别编译安装其他模型的httpd
./configure –prefix=/usr/local/httpd.work –with-mpm=worker
./configure –prefix=/usr/local/httpd.event –with-mpm=event
然后用不同的启动命令启动httpd
- 简述request报文请求方法和状态响应码
method(方法):
GET:从服务器获取一个资源;
HEAD:只从服务器获取文档的响应首部;
POST:向服务器发送要处理的数据;
PUT:将请求的主题部分存储在服务器上;
DELETE:请求删除服务器上指定的资源;
TRACE:追踪请求到达服务器中间经过的代理服务器;
OPTIONS:请求服务器返回对指定资源支持使用的请求方法;
协议查看或分析的工具:
tcpdump,tshark,wireshark
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
- 详细描述httpd虚拟主机、站点访问控制、基于用户的访问控制、持久链接等应用配置实例
- Httpd虚拟主机
虚拟主机
站点标识:socket
IP相同,但端口不同
IP不同,但端口均为默认端口;
FQDN不同;
请求报文中首部
Host:www.mageedu.com
报文首部
方法 URL HTTP版本
GET www.magedu.com httpd1.1
有三种实现方案:
基于ip:
为每个虚拟主机准备至少一个ip地址;
基于port:
为每个虚拟主机使用至少一个独立的port;
基于FQND:
为每个虚拟主机使用至少一个FQDN;
注意(专用于httpd-2.2):一般虚拟机不要与中心主机混用;因此,要使用虚拟主机,得先禁用main主机;
禁用方法:注释中心主机的DocumentRoot指令即可;
虚拟主机的配置方法:
<VirtualHost IP:PORT>
ServerName FQDN
DocumentRoot “”
</VirtualHost>
其他可用指令:
ServerAlias:虚拟主机的别名;可多次使用;
ErrorLog:
CustomLog:
<Directory>
…
</Directory
Alias
….
<VirtualHost 172.16.0.67:80>
ServerName www.magedu.com
DocumentRoot “/data/web/magedu”
<Directory “/data/web/magedu”>
Oprions None
AllowOverride None
Require all granted
</Directory>
CustomLog “logs/magedu_access” combined
</VirtualHost>
基于IP的虚拟主机示例:
<VirtualHost 172.16.0.67:80>
ServerName www.magedu.com
DocumentRoot “/data/web/magedu”
</VirtualHost>
<VirtualHost 172.16.0.68:80>
ServerName www.niaogedu.com
DocumentRoot “/data/web/niaoge”
</VirtualHost>
基于端口的虚拟主机:
<VirtualHost 172.16.0.67:80>
ServerName www.magedu.com
DocumentRoot “/data/web/magedu”
</VirtualHost>
<VirtualHost 172.16.0.68:8080>
ServerName www.niaogedu.com
DocumentRoot “/data/web/niaoge”
</VirtualHost>
基于FQDN的虚拟主机
<VirtualHost 172.16.0.68:80>
ServerName www.niaogedu.com
DocumentRoot “/www/niaogedu/htdocs”
</VirtualHost>
<VirtualHost 172.16.0.68:80>
ServerName www.magedu.com
DocumentRoot “/www/magedu/htdocs”
</VirtualHost>
注意:如果时httpd-2.2,则使用基于FQDN的虚拟主机时,需要事先使用如下指令:
NameVirtualHost IP:PORT
- 站点访问控制,基于用户的访问控制
基于IP的访问控制
允许所有主机访问:Require all granted
拒绝所有主机访问:Require all deny
控制特定的IP访问
Require ip ipaddr 授权指定来源的IP访问;
Require not ip ipaddr 拒绝;
控制特定的主机访问
Require host HOSTNAME 授权指定来源的主机访问;
REquire not host HOSTNAME 拒绝;
HOSTNAME:
FQDN:特定主机
domin.tld:指定与名下的所有主机
<RequireAll>
Require all granted
Require not ip 172.20
</Require>
基于用户认证方式有两种:
basic:明文
digest:消息摘要认证
安全域:要求用户认证后方能访问的路径;应该通过名称对其进行标识,以便于告知用户认证的原因;
用户的账号和密码存放于何处?
虚拟账号:仅用于访问某服务时用到的认证标识
存储:
文本文件;
SQL数据库;
ldap目录存储;
basic认证配置示例:
(1)定义安全域
<Directory “路径”>
OPtions None
AllowOverride None
AuthType Basic
AuthName “String” ##String 认证提示信息….
AuthUserFile “/PATH/TO/HTTPD_user_PASSWD_FILE”
Require user username1 username2 ….
</Directory>
2)提供账号和密码存储(文本文件)
使用专用命令完成此类文件的创建及用户管理
htpasswd [options] /PATH/TO/HTTPD_PASSWD_FILE username
-c:自动创建此处指定的文件,因此,仅应该在此文件不存在时使用;
-m:md5格式加密
-s:sha格式加密
-D:删除指定用户
另外:基于组账号进行认证;
a.定义安全域
<Directory “”>
OPtions None
AllowOverride None
AuthType Basic
AuthName “Admin Area, Plz enter username and password.”
AuthUserFile “/PATH/TO/HTTPD_user_PASSWD_FILE”
Require group groupname1 groupname2 ….
</Directory>
b.创建用户账号和组账号文件;
组文件:每一行定义一个组
GRP_NAME:username1 username2
- 持久连接
持久连接(保持连接,长连接)
persistent connection:tcp连续建立后,每个资源获取完成后不全断开连接,而是继续等待其他资源请求的进行;
如果断开?
数量限制
时间限制
副作用:对并发访问较大的服务器,长连接机制会使得后续某些请求无法得到正常响应;
折中:使用较短的持久连接时长,以及较少的请求数量;
配置如下
KeepAlive On|Off
KeepAliveTimeOut 15
MaxKeepAliveRequests 100
测试:
telnet WEB_SERVER_IP PORT
GET /URL HTTP/1.1
Host:SERVER_IP
注意:
httpd-2.4的KeepAliveTimeout可是毫秒级;
KeepAliveTimeout num[ms]
本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/102919