网站建设及推广图片,wordpress文章摘要调用,深圳的软件公司,电商平台排名Web Server - httpd2.1 http2.1.1 协议版本2.1.2 http报文2.1.3 web资源(web resource)2.1.4 一次完整的http请求处理过程2.1.5 接收请求的模型2.2 httpd配置2.2.1 MPM(多进程处理模块)1. 工作模式2. 切换MPM3. MPM参数配置2.2.2 主配置文件1. 基本配置2. 站点访问控制常见机制…
Web Server - httpd2.1 http2.1.1 协议版本2.1.2 http报文2.1.3 web资源(web resource)2.1.4 一次完整的http请求处理过程2.1.5 接收请求的模型2.2 httpd配置2.2.1 MPM(多进程处理模块)1. 工作模式2. 切换MPM3. MPM参数配置2.2.2 主配置文件1. 基本配置2. 站点访问控制常见机制3. 命令解析3.1 Options3.2 AllowOverride3.3 Order3.4 DirectoryIndex3.5 Alias3.6 AddDefaultCharset3.7 日志设定4. 配置示例4.1 控制页面资源允许所有来源的主机可访问4.2 控制页面资源不允许所有来源的主机可访问4.3 控制页面资源允许部分来源的主机可访问在介绍apache(httpd)配置之前我们先介绍下http
2.1 http
超文本传输协议Hyper Text Transfer ProtocolHTTP是一个简单的请求-响应协议它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII形式给出而消息内容则具有一个类似MIME的格式。这个简单模型是早期Web成功的有功之臣因为它使开发和部署非常地直截了当。
http、httpd和html概念 http/httpshyper text transfer protocol 超文本传输协议位于传输层默认端口80/tcp html:hyper text mark language 超文本标记语言 httpdc/s架构client/serverhttpd通过http协议通信 并不准确的表达web服务器通过httpd服务程序通过http协议响应给用户html文件。而用户通过浏览器(大多数情况下)向web服务器发送http请求获取html文件
web服务是一个C/S架构服务端提供服务客户端通过http协议或https协议进行访问拿到服务端对应的资源这就是web服务
2.1.1 协议版本
http/0.9 原型版本功能简陋 http/1.0 引入cache,MIME,method MIME:Multipurpose Internet Mail Extesion(多用途互联网邮件扩展可引入图片声音等,对不同资源进行编码) method:GET,POST,HEAD,PUT,DELETE,TRACE,OPTIONS http/1.1 增强了缓存功能主流版本 ----谷歌的SPDY方案---- http/2.0 借鉴了spdy性能提升可通过RFC了解 详细介绍
2.1.2 http报文
http请求报文http request http响应报文http response 一次http事务请求-响应 请求报文首部格式 methodURLVERSIONHEADERS:{name:value}request body2.1.3 web资源(web resource)
静态资源.jpg,.png,.gif,.html,.avi… 服务器段无需额外处理 动态资源.php,.jsp… 服务器需要通过执行程序作出处理发送给客户端的程序运行结果
注意一个页面中展示的资源有多个每个资源需要单独请求
URL: uniform resource locator统一资源定位符资源的标识机制用于描述服务器某特定资源位置 格式 Scheme://server[:port][path/to/source] 示例 http://www.sina.com.cn:80/index.html 大部分网站的默认端口都是80可以省略
2.1.4 一次完整的http请求处理过程 1.建立或处理连接接收或拒绝请求 2.接收请求接收来自网络上的主机请求报文中对某特定资源的一次请求的过程 3.处理请求对请求报文进行解析获取客户段请求的资源及请求方法等相关信息 4.访问资源获取请求报文中请求的资源一般到本地磁盘 DocumentRoot 5.构建响应报文 6.发送响应报文 7.记录日志分析用户访问行为 2.1.5 接收请求的模型
并发访问响应模型
单进程I/O模型启动一个进程处理用户请求一次只能处理一个请求多个请求被串行响应多进程I/O模型由父进程并行启动多个子进程每个子进程响应一个请求复用的I/O模型一个进程响应n个请求 多线程模式一个进程生成n个线程一个线程处理一个请求处理能力有限一个进程内的线程共享资源当一个线程在处理文件其他线程等待 事件驱动event-driver一个进程直接处理n个请求 复用的多进程I/O结构启动多个进程m每个进程生成n个线程响应请求数量m*n
2.2 httpd配置
2.2.1 MPM(多进程处理模块)
前文中提到了httpd的特性在本节中将更详细的阐述。在众多特性中较突出的有三个 高度模块化core modules DSOdynamic shared object 模块的动态装/卸载机制 MPMMulti processing Modules 多进程处理模块2.4也为动态可装卸 1. 工作模式
MPM定义了httpd的工作模式包括三种模式
prefork非线程型 多进程模型每个进程响应一个请求两级模型 一个主进程负责生成子进程及回收子进程负责创建套结字负责接收请求并将其派发给某子进程处理n个子进程每个子进程处理一个请求 工作模式会预先生成几个空闲进程随时等待用于响应用户请求最大空闲和最小空闲 (1) 主要工做方式当Apache服务器启动后mpm_prefork模块会预先建立多个子进程默认为5个每一个子进程只有一个线程当接收到客户端的请求后mpm_prefork模块再将请求转交给子进程处理而且每一个子进程同时只能用于处理单个请求。若是当前的请求数将超过预先建立的子进程数时mpm_prefork模块就会建立新的子进程来处理额外的请求。Apache老是试图保持一些备用的或者是空闲的子进程用于迎接即将到来的请求这样客户端的请求就不须要在接收后等候子进程的产生。 (2) prefork在效率上要比worker要高可是内存使用太多不擅长处理高并发的场景高并发 worker多线程多进程 多进程多线程模型每个线程处理一个用户请求三级模型 a) 一个主进程负责生成子进程负责创建套结字负责处理请求并将其派发给某子进程进行处理 b) 多个子进程每个子进程负责生成多个线程 c) 每个线程负责响应用户请求 并发响应数量m*n
m子进程数量
n每个子进程所能创建的最大线程数量与prefork的比较prefork速度要稍高于worker然而它须要的CPU和memory资源也稍多于worker
event 事件驱动模型多进程模型每个进程响应多个请求2.4生产环境可用两级模型 a) 一个主进程负责生成子进程负责创建套结字负责接收请求并将其派发给某子进程进行处理 b) 多个子进程基于事件驱动机制直接响应多个请求
2. 切换MPM
如果是yum安装的httpd可以通过修改配置文件/etc/httpd/conf.modules.d/00-mpm.conf进行切换 编译安装的需要修改/usr/local/apache/conf/httpd.conf文件中的
[rootk8s-node-02 apache]# cat conf/httpd.conf |grep mpm
#LoadModule mpm_event_module modules/mod_mpm_event.so
#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
LoadModule mpm_worker_module modules/mod_mpm_worker.so使用哪个工作模式则取消注释哪个修改完成后需要重新启动httpd
通过httpd -M可以查看已启动的模块
[rootk8s-node-02 apache]# httpd -M
Loaded Modules:core_module (static)so_module (static)http_module (static)mpm_worker_module (shared)authn_file_module (shared)authn_core_module (shared)authz_host_module (shared)authz_groupfile_module (shared)authz_user_module (shared)authz_core_module (shared)access_compat_module (shared)auth_basic_module (shared)reqtimeout_module (shared)filter_module (shared)mime_module (shared)log_config_module (shared)env_module (shared)headers_module (shared)setenvif_module (shared)version_module (shared)unixd_module (shared)status_module (shared)autoindex_module (shared)dir_module (shared)alias_module (shared)httpd -M 显示为shared例如编辑/etc/httpd/conf.modules.d/00-proxy.conf注释某个模块重启服务实现卸载模块在:/usr/lib64/httpd/modules/第三方模块后续也配置在此处使用loadmodule加载
查看Apache加载的模块httpd -M 或 apachectl -t -D DUMP_MODULES 或 apachectl -M 或 apachectl -l 查看Apache的工做模式httpd -v 或 httpd -l
3. MPM参数配置
httpd 2.2版本配置文件httpd.conf2.4大同小异。编译安装和yum安装的配置文件路径可能略有不同编译安装的配置文件在/usr/local/apache/conf/extra/httpd-mpm.conf
prefork配置
IfModule mpm_prefork_moduleStartServers 5MinSpareServers 5MaxSpareServers 10MaxRequestWorkers 250MaxConnectionsPerChild 0
/IfModule字段字段含义StartServers 5httpd服务启动后创建多少个空闲子进程MinSpareServers 5最少空闲子进程MaxSpareServers 10最大空闲子进程MaxRequestWorkers 250设置了容许同时最大接入的请求数量任何超过MaxRequestWorkers限制的请求将进入等候队列MaxConnectionsPerChild 0设置的是每一个子进程可处理的请求数。每一个进程在处理了“MaxConnectionsPerChild”请求后将自动销毁。0意味着无限即子进程永不销毁。设置为1时可防止意外的内存泄漏。设置为2时表示在服务器负载降低的时候会自动减小子进程数。可根据服务器的负载来调整此值ServerLimit 256为生命周期内最多允许子进程数MaxClients 256最多可创建的子进程数数值同serverlimitMaxRequestPerchild 4000每个子进程最多允许处理4000个请求之后关闭该进程
注 ① MaxRequestWorkers是这些指令中最为重要的一个设定的是Apache能够同时处理的请求是对Apache性能影响最大的参数。若是请求总数已经达到这个值经过ps -ef | grep http | wc -l来确认那么后面的请求就要排队直到某个已处理请求完毕。这就是系统资源还剩下不少而http访问却很慢的主要缘由。虽然理论上这个值越大能够处理的请求就越多建议将初始值设为以MB为单位的最大物理内存/2而后根据负载状况进行动态调整。
② prefork控制进程在最初创建“StartServers”子进程后为了满足MinSpareServers设置的须要建立一个进程等待一秒钟继续建立两个再等待一秒钟继续建立四个…如此按指数级增长建立的进程数最多达到每秒32个直到知足MinSpareServers设置的值为止这种模式能够没必要在请求到来时再产生新的进程从而减少了系统开销以增长性能。MaxSpareServers设置了最大的空闲进程数若是空闲进程数大于这个值Apache会kill掉一些多余的进程这个值不要设的过大但若是设的值比MinSpareServers小Apache会自动把其调整为MinSpareServers1。若是站点负载较大可考虑同时加大MinSpareServers和MaxSpareServers。
③ ServerLimit和MaxClientsMaxRequestWorkers的区别在Apache时代控制最大进程数只有MaxClients这个参数而且这个参数最大值为256而且是写死了的试图设置为超过256是无效的这是因为Apache1时代的服务器硬件是限制的。可是Apache2时代因为服务器硬件的升级硬件已经再也不是限制因此ServerLimit这个参数来控制最大进程数ServerLimit值MaxClient值才有效。ServerLimit要放在MaxClients以前值不要小于Maxclients。
worker配置
IfModule mpm_worker_moduleStartServers 3MinSpareThreads 75MaxSpareThreads 250ThreadsPerChild 25MaxRequestWorkers 400MaxConnectionsPerChild 0
/IfModule
字段字段含义StartServers 4httpd服务启动后创建多少个空闲子进程MaxClients 300最多可创建的线程数数值同serverlimitMinSpareThreads 75最小空闲数量的工作线程MaxSpareThreads 250最大空闲数量的工作线程ThreadPerChild 25每一个子进程产生的线程数量MaxRequestWorkers 400MaxRequestWorkers设置了容许同时最大接入的请求数量任何超过MaxRequestWorkers限制的请求将进入等候队列MaxRequestsPerChild 0无限制
注 ① Worker由主控制进程生成“StartServers”子进程每一个子进程中包含固定的ThreadsPerChild线程数各个线程独立地处理请求。一样为了避免在请求到来时再生成线程MinSpareThreads和MaxSpareThreads设置了最少和最多的空闲线程数。而MaxRequestWorkers设置了同时连入的clients最大总数若是现有子进程中的线程总数不能知足负载控制进程将派生新的子进程。MinSpareThreads和MaxSpareThreads的最大缺省值分别是75和250.这两个参数对Apache的性能影响并不大能够按照实际状况相应调节
② ThreadsPerChild是worker MPM 中与性能相关最密切的指令ThreadsPerChild的最大缺省值是64若是负载较大64位也是不够的这时要使用ThreadLimit指令他的最大缺省值是20000
③ Worker模式下所能同时处理的请求总数是由子进程总数乘以ThreadsPerChild值决定的应该大于等于MaxRequestWorkers。若是负载很大现有的子进程数不能知足时控制进程会派生新的子进程。默认最大的子进程总数是16加大时也须要显示声明ServerLimit。须要注意的是若是显示声明了ServerLimit那么它乘以ThreadsPerChild的值必须大于等于MaxRequestWorkers并且MaxRequestWorkers必须是ThreadsPerChild的整数倍不然Apache将会自动调节到一个相应值。
④ 进程与线程的区别线程是指进程内的一个执行单元也是进程内的可调度实体 a、地址空间进程内的一个执行单元进程至少有一个线程它们共享进程的地址空间而进程有本身独立的地址空间 b、资源拥有进程是资源分配和拥有的单位同一进程内的线程共享进程的资源 c、线程是处理器调度的基本单位但进程不是 d、两者都可并发执行进程和线程都是由操做 系统所体会的程序运行的基本单元 系统利用该基本单元实现系统对应用的并发性 e、简单来讲就是一个程序至少有一个进程一个进程至少有一个线程。线程的划分尺度小于进程使得多线程程序的并发性高。进程在执行过程当中拥有独立的内存单元而多个线程共享内存从而极大地提升了程序的运行效率 event模式
IfModule mpm_event_moduleStartServers 3MinSpareThreads 75MaxSpareThreads 250ThreadsPerChild 25MaxRequestWorkers 400MaxConnectionsPerChild 0
/IfModule这是Apache最新的工做模式是worker模式的变种它把服务进程从链接中分离出来。和worker模式不一样的是在于它解决了keep-alive长链接的时候占用线程资源被浪费的问题。在event工做模式中会有一些专门的线程用来管理这些keep-alive类型的线程当有真实请求过来的时候将请求传递给服务器的线程执行完毕后又容许它释放。这加强了在高并发场景下的请求处理。event模式不能很好的支持https的访问。
2.2.2 主配置文件
编译安装主配置文件:/usr/local/apache/conf/httpd.conf yum安装:/etc/httpd/conf/httpd.conf
1. 基本配置
ServerRoot /usr/local/apache #你的apache软件安装的位置。其它指定的目录如果没有指定绝对路径则目录是相对于该目录。
PidFile logs/httpd.pid #第一个httpd进程(所有其他进程的父进程)的进程号文件位置。
Listen 80 #服务器监听的端口号。
ServerName localhost:80 #主站点名称网站的主机名。
ServerAdmin adminclusting.com #管理员的邮件地址。
DocumentRoot /usr/local/apache/htdocs #主站点的网页存储位置。2. 站点访问控制常见机制
文件系统路径模板 Dierctroy .../DirectroyFIle .../FileFIleMatch PATTERN.../FileMatch例如 Directory /mnt/web/clusting Options FollowSymLinks AllowOverride None Order allow,deny Allow from all /DirectoryURL路径 Location .../LocationLocationMatch PATTERN.../LocationMatch3. 命令解析
3.1 Options
配置在特定目录使用哪些特性常用的值和基本含义如下 ExecCGI: 在该目录下允许执行CGI脚本。FollowSymLinks: 在该目录下允许文件系统使用符号连接。Indexes: 当用户访问该目录时如果用户找不到DirectoryIndex指定的主页文件(例如index.html),则返回该目录下的文件列表给用户。允许索引 -Indexes强制关掉功能防止上级目录共享SymLinksIfOwnerMatch: 当使用符号连接时只有当符号连接的文件拥有者与实际文件的拥有者相同时才可以访问。All启用除了MultiViews的所有选项3.2 AllowOverride
允许存在于.htaccess文件中的指令类型(.htaccess文件名是可以改变的其文件名由AccessFileName指令决定) None: 当AllowOverride被设置为None时。不搜索该目录下的.htaccess文件可以减小服务器开销。All: 在.htaccess文件中可以使用所有的指令。3.3 Order
控制在访问时Allow和Deny两个访问规则哪个优先 Allow允许访问的主机列表(可用域名或子网例如Allow from 192.168.0.0/16)。Deny拒绝访问的主机列表。3.4 DirectoryIndex
DirectoryIndex index.html index.html.var 目录索引
3.5 Alias
定义路径别名
#格式Alias /URL/ /PATH/TO/SOMEDIR/Alias /images/ /usr/share/background/#加显示授权DIrectory /usr/share/background/AllowOverride NoneOptions Indexes FollowSymLinksRequire all grantedDirectory3.6 AddDefaultCharset
设定默认字符集
AddDefaultCharset UTF-83.7 日志设定
日志类型 访问日志和错误日志 ① 错误日志 Errorlog /logs/error_log 符号连接指向/var/log/httpd/error_log loglevel warn
② 访问日志
LogFormat %h %l %u %t .... combined 日志格式
LogFormat %h %l %u %t .... common 日志格式%h:客户端IP地址
%l:Remote User通常为一个减号
%u:非为登陆访问时通常为一个减号
%t:服务器收到请求时的时间
%rfirst line of request表示请求报文首行记录了此次请求的方法url及协议版本
%s响应状态码
%b:响应报文大小单位字节
%{Referer}:请求报文中首部referer的值即从哪个页面中的超连结调转至当前页面
%{User-Agent}请求报文中首部“User-Agent的值即发出请求的程序浏览器版本4. 配置示例
Direcotry中基于源地址实现访问控制
4.1 控制页面资源允许所有来源的主机可访问
http2.2 Order定义生效次序写在后面的表示默认法则 Order,allow,deny Dierctroy Order allow,denyAllow from all所有人访问/Directroyhttp-2.4RequireDierctroy Require all granted,允许所有人访问/Directroy4.2 控制页面资源不允许所有来源的主机可访问
http2.2 Order,allow,denyDierctroy Order allow,denyDeny from all所有人访问/Directroyhttp-2.4RequireDierctroy Require all denied,允许所有人访问/Directroy4.3 控制页面资源允许部分来源的主机可访问
http2.2 allow from * deny from *
来源地址IPNetAddr 172.16 172.16.0.0 172.16.0.0/16 172.16.0.0/255.255.255.0 Dierctroy Order allow,denyDeny from 172.16.0.200 拒绝200访问Allow from 172.16除了16网段的都拒绝访问/Directroyhttp-2.4基于IP控制 RequireAllRequire all granted允许所有人访问Require not ip 192.15..IP地址或网络地址拒绝RequireAll基于机器名控制 Require host mageedu主机名或域名Require not host mageedeu主机名或域名注意要以上放规则要置于或配置块中 RequireAll Require all denied,拒绝所有人访问Require ip 192.15.IP地址或网络地址/ RequireAll