http 工作模式与模块
http 工作模式与模块
http 服务器应用
http服务器常用程序
- httpd apache
- nginx
- lighttpd
应用程序服务器
- IIS .asp
- tomcat .jsp
- jetty 开源的servlet容器,基于Java的web容器
- Resin CAUCHO公司,支持servlets和jsp的引擎
- webshpere(IBM), weblogic(BEA), jboss,oc4j(Oracle)
市场占有率统计
www.netcraft.com
特性:
高度模块化:core + modules 功能已模块形式存放,方便加载卸载。
DSO: Dynamic Shared Object 支持动态加/卸载
MPM:multi-processing module多路处理模块
MPM工作模式
表示了当前http服务的请求响应工作模式。
prefork
prefork:多进程I/O模型,每个进程响应一个请求,默认模型
一个主进程:生成和回收n个子进程,创建套接字,不响应请求
多个子进程:工作work进程,每个子进程处理一个请求;系统初始时,预先生成多个空闲进程,等待请求,最大不超过1024个(最大限制可以修改,但是还是会存在c10k问题。)
worker
worker:复用的多进程I/O模型,多进程多线程,IIS使用此模型一个主进程:生成m个子进程,每个子进程负责生个n个线程,每个线程响应一个请求,并发响应请求:m*n
event
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 空闲线程队列 ,这个时候就会有一个空闲线程队列中的进程变为监听状态。
线程或者进程,就会在这三种状态中切换。
工作一段时间后 可以将线程回收,然后提供一个新的线程来使用,保证系统的稳定性。让线程不要“过劳”
httpd功能特性
虚拟主机 : 在一台物理机上开辟多个虚拟机,有多种模式可以开启多个虚拟主机:IP、Port、FQDN
CGI:Common Gateway Interface,通用网关接口
正向代理 离客户端近
反向代理 离服务器端近
代理案例:
client --- proxy --- reverse proxy --- websrv1 websrv2 websrv3 链路方式
正向代理:比如我们访问一个视频站,大家都在看同一个视频,那么如果,所有人都从这一个服务器来拉取这个视频,那么走的都是重复流量,而且负载过大,这时候就需要一个代理服务器,把视频缓存到这个代理服务器上,让一部分的用户连接这个代理服务器,来获取这个视频
反向代理:对于收到的访问请求做调度,决定该请求最后去哪个服务器
负载均衡
路径别名
丰富的用户认证机制
- basic
- digest
支持第三方模块
http 安装
推荐Centos安装版本:
- CentOS 6: 2.2
- CentOS 7: 2.4
安装方式:
rpm:centos发行版,稳定,建议使用
编译:定制或特殊需求
CentOS 6程序环境:httpd-2.2
配置文件:
- /etc/httpd/conf/httpd.conf
- /etc/httpd/conf.d/*.conf
检查配置语法:
- httpd –t
- service httpd configtest
centos6配置目录
服务脚本
/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
http 2.2 常见配置
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
长连接要看具体的业务,然后来进行持续时间的更改。
如果是游戏的话,那么需要设置长一点,如果是官网或者电商网站,可以短一些。
MPM 多路处理模块
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个,那么系统就只能再一个一个打开进程,然后来接收多余的并发请求,所以如果并发大的话,可以在服务启动的时候就开启多个子进程
http 工作模式与模块的更多相关文章
- apache 的工作模式
总结:访问量大的时候使用 worker模式: 每个进程,启动多个线程来处理请求,每个线程处理一次请求,对内存要求比较高. prefoek模式 : 每个子进程只有一个线程,一次请求一个进程. 什么是a ...
- Apache常用2种工作模式prefork和worker比较
Apache两种常用工作模式:prefork和worker. prefork MPM prefork是一个非线程型的.预派生的MPM,使用多个进程,每个进程在某个确定的时间只单独处理一个连接,效率高, ...
- apache工作模式:prefork和worker
apache作为现今web服务器用的最广泛也是最稳定的开源服务器软件,其工作模式有许多中,目前主要有两种模式:prefork模式和worker模式 一.两种模式 prefork模式: prefork是 ...
- (转载)关于Apache 的两种工作模式
今天在查看服务器的时候,发现服务器http请求数 每天增长越来越多,在优化集群服务器的时候,查看到Apache 的工作模式是prefork,于是想到了worker 模式, 想暂时的把当前运行模式改成w ...
- 关于WIFI的工作模式--AP MODE/STATION MODE
wifi的concurrent mode 所谓wifi的共存模式,有以下几种: station mode + station mode station mode + ap mode station m ...
- php 工作模式
PHP运行模式 1.cgi通用网关接口 (少用)2.fast-cgi常驻型的 cgi [ngixn常用]3.cli命令运行 (命令行用得多)4.web模块模式(apache等web服务器的运行模式)[ ...
- apache 工作模式
apache三种工作模式: prefork(2.4前默认)/worker/event(2.4默认)内容整理来自以下网站http://m.blog.csdn.net/article/details?id ...
- php有三种工作模式
php有三种工作模式. 其中是最常见的是php作为一个模块工作在一个多进程的webserver中, 例如apache webserver. apache会启动一个主进程, 多个子进程(php). 主进 ...
- 初涉JavaScript模式 (11) : 模块模式
引子 这篇算是对第9篇中内容的发散和补充,当时我只是把模块模式中的一些内容简单的归为函数篇中去,在北川的提醒下,我才发觉这是非常不严谨的,于是我把这些内容拎出来,这就是这篇的由来. 什么是模块模式 在 ...
随机推荐
- 使用shell巧妙高效的批量删除历史文件或目录
背景:有实时产生的数据按小时分文件保存,如“/data/2013/09/18/14.txt”.现需要保留30天的最新数据,而删除所有其它的历史数据.注意“保留30天的最新数据”,可能不是连续的30天, ...
- 剑指Offer——数组中出现次数超过一半的数字——一题多解
看题目: 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2. ...
- malloc内存申请--释放-收缩
一.验证思路和代码 #include <stdio.h> #include <unistd.h> #include <malloc.h> #include < ...
- js中===、==、!=、!===的区别
结论 ===:先比较两个变量的类型,然后再比较值 !==:上面的值取非 ==:如果变量类型相同,比较值是否相同:类型不同,先转成相同类型,再比较值 !=:上面的值取非 代码 var num = 1; ...
- aspx有"记住我"的登录
客户端 <form id="form1" runat="server"> <div> 用户名:<input type=" ...
- form表单上传域(type="file")的使用----上传文件
一,单个文件的上传 1.html/jsp页面 <%@ page language="java" contentType="text/html; charset=UT ...
- 条件注解@Conditional
通过活动的profile,可以获得不同的Bean.Spring4提供了一个更通用的基于条件的Bean的创建,即使用@Conditonal注解 @Conditional根据满足某一个特定条件创建一个特定 ...
- JS性能优化的那点事
1:减少查找次数,把需要查找的内容先提取出来,全部添加计算完成后,再统一查找一次即可,如下面例子: <script> window.onload = function () { var s ...
- alias 新的命令='原命令 -选项/参数'。举例说明,alias l=‘ls -lsh' 将重新定义 ls 命令,现在只需输入 l 就可以列目录了。
alias 新的命令='原命令 -选项/参数'.举例说明,alias l=‘ls -lsh' 将重新定义 ls 命令,现在只需输入 l 就可以列目录了.
- HDU5269 字典树
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5269 ,BestCoder Round #44的B题,关于字典树的应用. 比赛的时候没想出做法,现在补 ...