目录html
http服务器经常使用程序nginx
应用程序服务器web
市场占有率统计
www.netcraft.comapache
特性:
高度模块化:core + modules 功能已模块形式存放,方便加载卸载。
DSO: Dynamic Shared Object 支持动态加/卸载
MPM:multi-processing module多路处理模块vim
表示了当前http服务的请求响应工做模式。centos
prefork:多进程I/O模型,每一个进程响应一个请求,默认模型
一个主进程:生成和回收n个子进程,建立套接字,不响应请求
多个子进程:工做work进程,每一个子进程处理一个请求;系统初始时,预先生成多个空闲进程,等待请求,最大不超过1024个(最大限制能够修改,可是仍是会存在c10k问题。)缓存
worker:复用的多进程I/O模型,多进程多线程,IIS使用此模型一个主进程:生成m个子进程,每一个子进程负责生个n个线程,每一个线程响应一个请求,并发响应请求:m*ntomcat
event:事件驱动模型(worker模型的变种)
一个主进程:生成m个子进程,每一个进程直接响应n个请求,并发响应请求:m*n,有专门的线程来管理这些keep-alive类型的线程,当有真实请求时,将请求传递给服务线程,执行完毕后,又容许释放。这样加强了高并发场景下的请求处理能力服务器
httpd-2.2: event 测试版,centos6默认
httpd-2.4:event 稳定版,centos7默认多线程
http2.2 默认使用 prefork 工做模式 http2.2 有三个运行主程序,分别对应三个模式
http2.4 集成在一个主程序中,经过模块切换来切换模式
若是有一个用户发起请求,须要一个处于监听状态的线程,该线程会切换为work状态,来响应该请求,处理完后,该线程会进入idle worker 空闲线程队列 ,这个时候就会有一个空闲线程队列中的进程变为监听状态。
线程或者进程,就会在这三种状态中切换。
工做一段时间后 能够将线程回收,而后提供一个新的线程来使用,保证系统的稳定性。让线程不要“过劳”
虚拟主机 : 在一台物理机上开辟多个虚拟机,有多种模式能够开启多个虚拟主机:IP、Port、FQDN
CGI:Common Gateway Interface,通用网关接口
正向代理 离客户端近
反向代理 离服务器端近
代理案例:
client --- proxy --- reverse proxy --- websrv1 websrv2 websrv3 链路方式
正向代理:好比咱们访问一个视频站,你们都在看同一个视频,那么若是,全部人都从这一个服务器来拉取这个视频,那么走的都是重复流量,并且负载过大,这时候就须要一个代理服务器,把视频缓存到这个代理服务器上,让一部分的用户链接这个代理服务器,来获取这个视频
反向代理:对于收到的访问请求作调度,决定该请求最后去哪一个服务器
负载均衡
路径别名
丰富的用户认证机制
支持第三方模块
推荐Centos安装版本:
安装方式:
rpm:centos发行版,稳定,建议使用
编译:定制或特殊需求
CentOS 6程序环境:httpd-2.2
配置文件:
检查配置语法:
服务脚本 /etc/rc.d/init.d/httpd 主配置文件 /etc/sysconfig/httpd 服务控制和启动: chkconfig httpd on|off service {start|stop|restart|status|configtest|reload} httpd 默认站点网页文档根目录: /var/www/html 模块文件路径: /etc/httpd/modules /usr/lib64/httpd/modules 主程序文件:分别对应三种不一样的MPM工做模式 /usr/sbin/httpd /usr/sbin/httpd.worker /usr/sbin/httpd.event 主进程文件: /etc/httpd/run/httpd.pid 日志文件目录: /var/log/httpd access_log: 访问日志 error_log:错误日志 帮助文档包: httpd-manual
httpd配置文件的组成:
# grep "Section" /etc/httpd/conf/httpd.conf ### Section 1: Global Environment ### Section 2: 'Main' server configuration ### Section 3: Virtual Hosts
配置格式:directive value
directive: 不区分字符大小写
value: 为路径时,是否区分大小写,取决于文件系统
echo servertokens prod >> /etc/httpd/conf/test.conf
修改http配置的时候,不建议在主配置文件中修改,能够新建本身的配置文件,来进行修改
常见配置详解
vim /etc/httpd/conf/httpd.conf #Apache服务器存在的主目录 ServerRoot /etc/httpd #表示相对于/etc/httpd 下的路径 说明只要咱们把配置文件放到conf.d下,而且已.conf结尾,http都能识别而且加载 IncludeOptional conf.d/*.conf #该配置文件存放着没有默认index主页的时候,所要显示的页面的配置。 /etc/httpd/conf.d/welcome.conf #该选项能够更改客户端访问web服务器时,头文件所显示的当前web信息,不建议使用默认的full,这样会显示全部的信息 ServerTokens ,建议使用:ServerTokens Prod #修改监听的IP和Port Listen [IP:]PORT (1) 省略IP表示为本机全部IP (2) Listen指令至少一个,可重复出现屡次 ,若是填写多个监听端口的话,那么多个端口都会开启监听web服务 Listen 80 Listen 8080 #表示绑定该IP的80端口,这样的话就只有同网段的容许访问,其余内网网段的没法进行访问 listen 192.168.30.1:80
Persistent Connection:链接创建,每一个资源获取完成后不会断开链接,而是继续等待其它的请求完成,默认关闭持久链接
断开条件:数量限制:100
时间限制:以秒为单位, httpd-2.4 支持毫秒级
反作用:对并发访问量较大的服务器,持久链接功能会使用有些请求得不到响应
折衷:使用较短的持久链接时间
#默认keeyalive 不存在与配置文件中,就是使用的默认值,是5秒 #是否开启持久化链接 KeepAlive On|Off #持久化链接超时时间 KeepAliveTimeout 15 #持久化请求次数限制,若是单用户请求满100次也就断开了,哪怕没有到长链接设置的断开时间 MaxKeepAliveRequests 100 #测试 telnet 192.168.30.1 80 GET /index.html HTTP/1.1 Host: 6.6.6.6
长链接要看具体的业务,而后来进行持续时间的更改。
若是是游戏的话,那么须要设置长一点,若是是官网或者电商网站,能够短一些。
httpd-2.2不支持同时编译多个模块,因此只能编译时选定一个;rpm安装的包提供三个二进制程序文件,分别用于实现对不一样MPM机制的支持
确认方法:
ps aux | grep httpd
默认为/usr/sbin/httpd, 即prefork模式
2.2默认使用prefork 一主进程,其余为子进程,有多少用户请求就开多少个子进程,子进程来响应用户请求
worker 模式:一个主进程开启多个子进程,每一个子进程开启多个子线程,每一个子线程来响应用户的请求
模块相关命令
#查看静态编译的模块 httpd -l #查看静态编译及动态装载的模块 httpd –M #动态模块加载:不需重启即生效 #动态模块路径 /usr/lib64/httpd/modules/ #更换使用的httpd程序: /etc/sysconfig/httpd HTTPD=/usr/sbin/httpd.worker 重启服务生效 pstree -p|grep httpd 查看进程和线程 Httpd 2.4 与之不一样,以动态模块方式提供 配置文件:/etc/httpd/conf.modules.d/00-mpm.conf ,注释不须要的模块,取消注释你须要的模块行 httpd –M |grep mpm 重启服务生效 pstree -p|grep httpd 查看进程和线程
<IfModule prefork.c> #表示服务启动的时候,开启多少个子进程 StartServers 8 #最小数量的服务器进程,保存备用 MinSpareServers 5 # 最大数量的服务器进程,保存备用 MaxSpareServers 20 #最多进程数,最大20000 ServerLimit 256 #最大并发 MaxClients 256 子进程最多能处理的请求数量。# MaxRequestsPerChild 4000 在处理MaxRequestsPerChild 个请求以后,子进程将会被父进程 终止,这时候子进程占用的内存就会释放(为0时永远不释放) </IfModule>
若是并发来了100个,进程只有20个,那么系统就只能再一个一个打开进程,而后来接收多余的并发请求,因此若是并发大的话,能够在服务启动的时候就开启多个子进程