httpd具有以下特性:
其中并行处理模式MPM(多路处理模块)包含了三种运行模式。分别为prefork、worker和event。
profork是一个两级进程模型,父进程管理子进程,每个进程响应一个请求。由一个主进程负责生成多个子进程以及回收子进程、创建套接字、接收请求,并将请求派发给某个子进程进行处理。每个子进程只负责处理一个请求。其工作模型:预先生成几个空闲进程,等待用于响应用户请求,设定最大空闲和最小空闲;所有已建立的套接字由客户端进程和服务期端子进程进行通信,一旦出现空闲,会回收子进程。
特点:进城之间完全独立,无需担心线程安全问题。但进程占用的系统资源较多,在处理高并发请求时无法快速处理。
其在httpd2.2为的配置:
worker是一个三级结构、多进程多线程的模式,其在启动时也预先fork了几个子进程,每个子进程能够生产若干个服务线程和若干个监听线程,每个服务线程处理一个请求,监听线程负责接入请求并将其传递给服务线程处理和应答。线程比起进程会更轻量,因为线程通常会共享父进程的内存空间,因此内存的占用会减少些,在高并发的场景下表现比prefork模式更好。其工作模型:
worker模式的特点:线程比起进程会更轻量级,因此占用用内存少,处理高并发请求时性能更好。但是当一个线程出现问题的时候会导致同一进程下的线程也会出现问题。在keep-alive长连接的方式下,某个线程会被一直占用,即使中间没有请求,也需要等待到超时才会被释放。
在httpd2.2中的配置
event是一个事件驱动模型,是一个两级结构的多进程模型,父进程管理子进程,子进程通过event-driven机制直接响应多个请求。event模式解决了在keep-alive模式下,线程被长期占用直到超时,从而导致资源浪费的问题。
在event模块中,有一个专门的线程来管理这些keep-alive类型的线程,当接收到真实的请求时,会将请求传递给服务线程,执行完毕后,会将对应的服务线程释放,这样就能实现线程的异步非阻塞。
在httpd2.2中的配置:
示例 :
Centos6系统下实现httpd-2.2的安装,并分别实现prefork、worker、event等几种工作方式.
1、centos6上安装装httpd-2.2
prefork模式
实现prefork模式。httpd的默认运行模式为prefork,查看其运行模式为:
在/etc/httpd/conf/httpd.conf文件中查看prefork的设置
启动httpd服务并查看相关进程状态:
修改/etc/httpd/conf/httpd.conf中的prefork配置
重启httpd服务并常看进程状态:
worker模式
修改配置文件/etc/sysconfig/httpd配置文件,将文件中HTTPD=/usr/sbin/httpd.worker这一句取消注释。然后重启服务查看进程状态。
然后修改/etc/httpd/conf/httpd.conf文件中的worker配置
event模式
修改配置文件/etc/sysconfig/httpd配置文件,将文件中HTTPD=/usr/sbin/httpd.worker这一句修改为HTTPD=/usr/sbin/httpd.event。然后重启服务查看进程状态。
修改配置文件/etc/httpd/conf/httpd.conf,添加evnet配置
查看进程状态
一次完整的http请求处理过程:
在一次完整的http请求过程中,会出现两种报文,分别是http的请求报文request和http的响应报文response。
以上各字段的含义:
http协议的请求方法共有以下7中
状态响应码是http请求处理返回的结果状态标识,属于响应报文中的内容,熟知常见的状态响应码能帮助我们快速定位故障及进行相应的排错,状态码的类型大体可分为下面几类:
常用的状态码:
httpd服务的主配置文件/etc/httpd/conf/httpd.conf。此文件内容通常以下三大部分组成:
除主配置稳健以外,其余的相关配置文件包括:
这些配置文件在httpd2.4中通常在主配置文件中通过 IncludeOptional conf.d/*.conf 、 Include conf.modules.d/*.conf 进行调用响应目录下的配置文件。路径为相对路径,其根目录由主配置文件中的Serverroot进行设定。
在主配置文件中,修改httpd服务监听IP和接口的格式为:
注意:
示例:
持久链接是指tcp连续建立后,每个资源获取完成后不全断开连接,而是继续等待其它资源请求的进行。对并发访问量较大的服务器,长连接机制会使得后续某些请求无法得到正常响应;此时,设置较短的持久连接时长,以及较少的请求数量来缓解。具体设置如下:
示例:
在httpd服务的主配置文件中,“'Main' server”部分,定义web文档路径映射。
常用的站点访问控制即只有两种:一种是基于文件系统路径的访问控制机制;另一种是基于URL的站点访问控制机制。两者可同时设置
基于文件系统路径:
1、基于源地址实现访问控制,在此设置的目录下所有文件都遵循此处的指令设置。格式为:
2、针对单个文件实现访问控制。其格式为:
3、DSO动态共享对象机制
在/etc/httpd/conf/httpd.conf主配置文件中使用配置指令实现模块加载:
模块文件路径可使用相对路径:相对于ServerRoot(默认为/etc/httpd)
例如:
4、根据模式匹配到的文件实现访问控制。正则表达式要启用引擎,因此建议不使用;其格式为:
基于URL路径:
定义URL的目录,表示在此设置的目录下所有文件都遵循此处的指令设置;
"Directory"中各选项的参数
示例
新建/web/html目录,编辑修改httpd服务,使其能够web访问/web/html目录下的index.html目录文件:
httpd的虚拟主机是利用httpd自带的VirtualHost功能来实现的。一个httpd服务器上配置多个虚拟主机,实现一个服务器提供多站点服务,其实就是访问同一个服务器上的不同目录。虚拟主机的配置方式为:
在/etc/httpd/conf/httpd.conf主配置文件中修改,或者在//etc/httpd/conf.d/*.conf目录下新建配置文件。
httpd虚拟主机有三种实现方式:
1、基于IP方式的实现:需要给每个虚拟主机设置至少一个IP地址。
示例:
利用virtualhost基于IP的方式实现/var/www/html目录和/web/html目录下的网页文件的同时访问
2、基于port的方式实现:需要为每个虚拟主机使用至少一个独立的port。
示例:
基于port的方式实现/var/www/html目录和/web/html目录下的网页文件的同时访问。
3、基于FQDN的方式实现:为每个虚拟主机使用至少一个FQDN。其配置方式为:如果是httpd-2.2,需要在配置文件中添加 NameVirtualHost IP:PORT
示例:
修改window系统的hosts文件,并测试
基于用户的访问控制是通过http协议自身的认证来实现的。http协议的认证有两种方式:
由于并不是所有浏览器都支持摘要认证,所以一般使用较多的是basic认证方式。其设置过程如下:
1、用htpasswd命令生成提供账号和密码存储的文本文件
htpasswd
语法 :
选项:
设置过程:
2、编辑配置文件,设置用户认证,然后重启httpd。配置文件既可以是修改主配置文件/etc/httpd/conf/httpd.conf,也可以在/etc/httpd/conf.d/文件加下新建配置文件。
访问服务器测试
有大量用户需要认证时,可使用基于域的认证方式,把用户加入到域中,将用户划分为相应的域组,并根据域组来做相应的访问控制。
1、先创建域组文件:
2、修改配置文件,然后重启服务,登陆访问测试:
1 概述httpd是Apache 超文本传输协议 (HTTP)服务器的主程序。被设计为一个独立运行的后台进程,它会建立一个处理请求的子进程或线程的池。20世纪90年代初,国家超级计算机应用中心NCSA开发,1995年开源社区发布apache(a patchy server)
2 httpd特性:
.高度模块化:core + modules
.DSO: Dynamic Shared Object动态加/卸载
.MPM:multi-processing
module多路处理模块
3 httpd功能特性
.虚拟主机:基于IP、Port、FQDN来创建虚拟主机,可以在一台物理服务器上搭建多个网站
.CGI:Common
Gateway Interface,通用网关接口
网关解决了不同的网络或者不同的协议之间的通信,相当于是翻译的作用,这里是一个通用的概念
正向代理:为客户端访问外部网络提供服务,主要是提供了缓存,同时也可以进行用户行为控制
反向代理:起到了调度的作用,同时也可以做行为控制,nginx可以作为反向代理服务器,haproxy是专业的反向代理服务器
.负载均衡:根据用户的访问量来控制将请求分发到哪一台服务器上
.路径别名
.丰富的用户认证机制:如打开页面后弹出用户名和密码,一般不用web提供的,都是公司自己定制实现
basic
digest
.支持第三方模块
4 Httpd安装
.版本
CentOS6: 2.2
CentOS7: 2.4
.安装方式:
rpm:centos发行版,稳定,建议使用
编译:定制或特殊需求,如软件版本有漏洞,要通过源码编译安装实现,或者定制自己的特定需求功能
.CentOS 6程序环境:httpd-2.2
配置文件:
/etc/httpd/conf/httpd.conf
/etc/httpd/conf.d/*.conf
/etc/httpd/conf/httpd.conf配置了Include
conf.d/*.conf这句话,表示模块可以单独写在/etc/httpd/conf.d/这个路径下,写出独立的配置文件,也可以加载出模块这里也可以看出,如果要额外添加配置,增加功能,可以直接写在/etc/httpd/conf.d/这个路径下的模块,这样要删除也比较好删。当主配置文件和子配置文件都有相同的配置是,如果同一字段的配置有冲突,默认是以主配置文件生效的,原因是在主配置文件中include的子配置文件这句配置在配置DocmentRoot"/app/website"之前,默认是后面的配置生效,所以DocmentRoot"/app/website"这行配置比子配置优先,覆盖了前面的配置
检查配置语法:
httpd –t
service httpd configtest
5 httpd自带的工具程序
.httpd自带的工具程序
htpasswd:basic认证基于文件实现时,用到的账号密码文件生成工具
apachectl:httpd自带的服务控制脚本,支持start和stop
这个工具类似dns的rndc这个工具
apachectl这是一个脚本
apxs:httpd-devel包提供,扩展httpd使用第三方模块工具
rotatelogs:日志滚动工具
access.log -->access.log,access.1.log -->access.log, acccess.1.log, access.2.log依次增加log,最新的log放在文件access.log里,旧的log会依次备份
suexec:访问某些有特殊权限配置的资源时,临时切换至指定用户身份运行
6 httpd的压力测试工具
.httpd的压力测试工具.ab来自httpd-tools服务包
.ab, webbench, http_load, seige
.Jmeter开源
.Loadrunner商业,有相关认证
.tcpcopy:网易,复制生产环境中的真实请求,并将之保存
.ab [OPTIONS] URL
来自httpd-tools包
ab测试的是最大性能,所以实际情况下,可能不是最大性能在处理http请求
-n:总请求数
-c:模拟的并行数
-k:以持久连接模式测试
ulimit –n #调整能打开的并发文件数,例子ulimit -n 2048 调整为2048.ulimit -a可以查看所有参数
7 CentOS 6 httpd程序环境
.服务脚本:/etc/rc.d/init.d/httpd
脚本配置文件:/etc/sysconfig/httpd
.服务控制和启动:
chkconfighttpdon|off
service{start|stop|restart|status|configtest|reload}httpd
端口号默认是80
.站点网页文档根目录:
/var/www/html
.模块文件路径:其中/etc/httpd下的modules是软链接的关系
modules ->../../usr/lib/httpd/modules
/etc/httpd/modules
/usr/lib64/httpd/modules
CentOS 6 httpd程序环境
.主程序文件:
/usr/sbin/httpd,默认用的是httpd
/usr/sbin/httpd.worker
/usr/sbin/httpd.event
.主进程文件:
/etc/httpd/run/httpd.pid
这个是服务启动的时候才会生成,服务器停止的时候就删掉,如果已经存在同名文件,启动时候就会覆盖掉这个进程
.日志文件目录:
/var/log/httpd
access_log:访问日志
error_log:错误日志
.帮助文档包:
httpd-额外的文档包,建议要安装,否则要到官网上才能看到
yum install httpd-manual,然后要重启服务或者重新加载配置才能使用
service httpd reload然后在自己搭建的apache就可以直接访问,如 http://172.18.50.75/manual/
一、介绍
二、Linux下apache的安装
三、apache的基础信息
四、配置apache服务
五、apache的虚拟主机
六、Apache httpd.conf配置详解
七、特殊使用场景
1. Linux Apache配置多个站点同时运行
Apache HTTP Server (简称Apache)是 Apache软件基金会 的一个开放源码的网页服务器,可以在大多数计算机操作系统中运行,由于其多平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩展,将Perl/Python等解释器编译到服务器中。 [2]
Apache HTTP服务器 是一个模块化的服务器,源于NCSAhttpd服务器,经过多次修改,成为世界使用排名第一的 Web服务器 软件。
它可以运行在几乎所有广泛使用的 计算机平台 上。
Apache源于NCSAhttpd服务器,经过多次修改,成为世界上最流行的 Web服务器 软件之一。Apache取自“a patchy server”的读音,意思是充满补丁的服务器,因为它是 自由软件 ,所以不断有人来为它开发新的功能、新的特性、修改原来的缺陷。Apache的特点是简单、速度快、性能稳定,并可做 代理服务器 来使用。
yum install httpd -y #安装apache软件包
systemctl start httpd #打开服务
systemctl enable httpd #开机自启动
systemctl stop firewalld #关闭防火墙
systemctl disable firewalld #开机不启动防火墙
systemctl restart httpd#重新开启
firewalld-cmd --permanent --add-service=http #在防火墙策略中添加http和https服务
firewalld-cmd --permanent --add-service=https
firewall-cmd --permanent --add-port=8080/tcp
firewalld-cmd --reload #重新加载策略
firewall-cmd --list-all #查看防火墙:
apache还有一个使用手册:需要安装httpd-manual包
yum install httpd-manual -y
各个主要子目录的用途如下:
bin:存放httpd服务的各种执行程序文件。包括主程序httpd、服务控制工具apachectl等。
cgi-bin:存放各种CGI程序文件。
logs:存放httpd服务的日志文件。
conf:存放httpd服务的各种配置文件,包括主配置文件httpd.conf、增强配置子目录extra等。
htdocs:存放网页文档,包括默认首页文件index.html等。
module:存放httpd服务的各种模块文件。
1.在默认发布目录发布内容
主配置目录: /etc/httpd/conf
主配置文件:/etc/httpd/conf/httpd.conf
子配置目录:/etc/httpd/conf.d
子配置文件:/etc/httpd/conf.d/*.conf
默认发布目录:/var/www/html
默认发布文件:index.html
默认端口:80
默认安全上下文:httpd_sys_content_t
程序开启默认用户:apache
apache日志:/etc/httpd/logs/*
netstat -antlupe | grep httpd ##查看当前http服务的网络接口
2.修改默认端口
vim /etc/httpd/conf/httpd.conf
Listen 8080 ##修改默认端口为8080
3.修改默认发布文件:
默认发布文件就是访问apache时没有指定文件名称时默认访问的文件。
这个文件可以指定多个,有访问顺序
vim /etc/httpd/conf/httpd.conf
DirectoryIndex westos.html index.html
##当index.html不存在时,访问westos.html
##如果将westos.html放到index.html前面,
在两个文件都存在的情况下会默认访问westos.html里面的内容
##如果没编辑/etc/httpd/conf/httpd.conf(没添加加westos.html),
要想看到westos的页面,则在浏览器中输入:http端IP/westos.html 即可
# systemctl restart httpd.service 修改完配置文件记得一定要重启服务生效
4.修改默认发布目录
vim /etc/httpd/conf/httpd.conf
DocumentRoot "/www/html"
<Directory "/www/html">
Require all granted
</Directory>
index.html:apache默认发布文件
news.conf 或 music.conf:apache子配置文件
恢复默认发布目录,并创建默认文件index.html
cd /etc/httpd/conf.d/ #进入apache服务子配置目录
vim adefault.conf #建立默认发布目录配置文件
<VirtualHost _default_:80>
DocumentRoot /var/www/html #发布文件路径
CustomLog "logs/adefault.log" combined #日志路径,这里写相对路径,内容在/etc/httpd/logs/*.log里面
</VirtualHost>
https://www.cnblogs.com/mzhaox/p/11216635.html
1. Linux Apache配置多个站点同时运行
这样一种场景;我们有一台服务器;但是想挂多个网站;那么Apache下配置虚拟主机可以满足这个需求;
1). 比较简单的是基于主机名的配置步骤如下:
step0:示例环境:
ip:115.28.17.191
域名:baijunyao.com
thinkbjy.com
目录: /var/www/html/baijunyao
/var/www/html/thinkbjy
step1:修改hosts文件
[root@iZ28qa8jt4uZ /]# ifconfig //查看ip并记录自己的ip地址
[root@iZ28qa8jt4uZ /]# vim /etc/hosts //修改hosts文件 添加如下两行内容
115.28.17.191 baijunyao.com
115.28.17.191 anlianma.com
step2:修改httpd.conf文件
[root@iZ28qa8jt4uZ /]# vim /etc/httpd/conf/httpd.conf //修改httpd.conf文件 删除990行 NameVirtualHost *:80前的#注释
step3:修改httpd-vhosts.conf文件
[root@iZ28qa8jt4uZ /]# vim /etc/httpd/conf.d/virtual.conf //设置httpd-vhosts.conf如下 如没有则新建
<VirtualHost *:80>
DocumentRoot /var/www/html/baijunyao
ServerName baijunyao.com
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /var/www/html/anlianma
ServerName anlianma.com
</VirtualHost>
虚拟主机配置到此结束;在对应的目录下新建html页面测试即可;
2). 另一种方式是
实际应用中,一个使用自己独有的配置文件,另一个使用默认Apache配置
Apache默认配置不表述。下面仅仅介绍独立配置文件,以zabbix为例
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)