apache工作模式及虚拟主机的配置

apache的工作模式

MPM

名词解释MPM   Multipath Process Module 多道处理模块。Linux中常使用prefork

worker event三种MPM 即apache常用的三种工作模式。

prefork

prefork为多进程模型,每个进程响应一个请求。其工作过程简单说来就是一个主进程:负责生成n个
子进程(子进程也称为工作进程),每个子进程处理一个用户请求;即使没有用户请求,也会预先生成
多个空闲进程,随时等待请求到达;子进程最大不会超过1024个;
prefork有以下几个特点:
主进程只负责接收,不负责处理和响应
主进程为监听套接字;子进程为连接套接字
主进程使用80端口,子进程使用非80端口
prefork模式极为稳定,任何一个进程崩溃了都不会影响其他进程

worker

worker为多线程模型,每个线程响应一个请求;其工作过程简单说来就是一个主进程,生成多个子进
程,每个子进程负责生成多个线程,每个线程响应一个请求;因此如果有m个进程,n个线程:则最大并
发响应数为m*n
worker有以下的特点:
无论有没有请求到达,子进程都会预先生成几个空闲线程。当用户请求到达时,它会用预先生成的线程
去响应,而不是临时生成进程,以便达到快速响应的目的。
注:线程不比进程轻量级,内部调度进程和线程是一样的,worker比起prefork并没有显著的提升,
只是可以作为另一种方案

event

event为事件驱动模型,每个线程响应n个请求;一个主进程:生成m个子进程,每个进程直接响应n个
请求;
需要注意的是在httpd-2.2中, event为测试使用;而在httpd-2.4中,event可直接用于生产环境

httpd-2.2不支持同时编译多个模块,所以只能编译时选定一个;rpm安装的包提供三个二进制程序文件,分别用于实现对不同MPM机制

1.查看当前的工作模式

root 15000 0.0 0.3 177804 3924 ? Ss 00:48 0:00 /usr/sbin/htt
pd
apache 15002 0.0 0.2 177804 2512 ? S 00:49 0:00 /usr/sbin/htt
pd
apache 15003 0.0 0.2 177804 2512 ? S 00:49 0:00 /usr/sbin/htt
pd
apache 15004 0.0 0.2 177804 2528 ? S 00:49 0:00 /usr/sbin/htt
pd
apache 15005 0.0 0.2 177804 2512 ? S 00:49 0:00 /usr/sbin/htt
pd
apache 15006 0.0 0.2 177804 2512 ? S 00:49 0:00 /usr/sbin/htt
pd
apache 15007 0.0 0.2 177804 2512 ? S 00:49 0:00 /usr/sbin/htt
pd
apache 15008 0.0 0.2 177804 2512 ? S 00:49 0:00 /usr/sbin/htt
pd
apache 15009 0.0 0.2 177804 2512 ? S 00:49 0:00 /usr/sbin/htt
名词解释MPM MultipathP rocessModule 多道处理模块。Linux中常使用prefork
worker event三种MPM 即apache常用的三种工作模式。
pd
root 15033 0.0 0.0 103244 872 pts/0 S+ 00:51 0:00 grep httpd
[root@local ~]# httpd -l
#查看核心中编译的静态模块,默认为prefork模块
compiled in modules:
core.c #httpd的核心模块
prefork.c #prefork模块
http_core.c #http功能的核心模块
mod_so.c #支持模块动态装卸
[root@local ~]# httpd.event –l
#如果当前加载的是event模块,需要这样查
Compiled in modules:
core.c
event.c
http_core.c
mod_so.c
[root@local ~]# httpd -M #查看静态编译及动态装载的所有模块
#因这些模块不是本次博文的重点,因此这里不做赘述

2.更改当前的工作模式为worker模式

[root@local ~]# vim /etc/sysconfig/httpd #编辑配置文件
HTTPD=/usr/sbin/httpd.worker #将前面的注释去掉,保存退出
[root@local ~]# service httpd restart #重启服务
[root@local ~]# ps aux | grep httpd
root 15090 0.0 0.4 178012 4104 ? Ss 01:01 0:00 /usr/sbin/htt
pd.worker
apache 15093 0.0 0.5 522272 5368 ? Sl 01:01 0:00 /usr/sbin/htt
pd.worker
apache 15094 0.0 0.5 587808 5384 ? Sl 01:01 0:00 /usr/sbin/htt
pd.worker
apache 15095 0.0 0.5 522272 5372 ? Sl 01:01 0:00 /usr/sbin/htt
pd.worker
root 15205 0.0 0.0 103244 876 pts/0 S+ 01:01 0:00 grep httpd
此时工作模式已更改为worker模式

3.工作模式的配置

prefork的配置:
<IfModule prefork.c>
StartServers 8 #服务启动时启动的进程数
MinSpareServers 5 #最小空闲进程数
MaxSpareServers 20 #最大空闲进程数
ServerLimit 256
#服务器端进程数上限,通常与下面的值相等
MaxClients 256
#服务器端所允许启动的最多进程数(最多允许多少个客户端同时请求响应)
MaxRequestsPerChild 4000
#服务器的一个子进程最多响应多少次请求
</IfModule>
worker的配置:
<IfModule worker.c>
StartServers 4
MaxClients 300 #服务器最大启动的线程数
MinSpareThreads 25 #最小空闲线程数
MaxSpareThreads 75 #最大空闲线程数
ThreadsPerChild 25 #每个进程启动的线程数
MaxRequestsPerChild 0 #0表示不做限制
</IfModule>

虚拟主机

有三种实现方案:
基于ip:
为每个虚拟主机准备至少一个ip地址;
基于port:
为每个虚拟主机准备至少一个专用port;实践中很少使用;
基于hostname:
为每个虚拟主机准备至少一个专用hostname;最有用
可混合使用上述三种方式中任意方式;

注意:一般虚拟主机莫与中心主机混用,所以,要使用虚拟主机,先禁用中心主机;禁用中心主机:注释DocumentRoot

每个虚拟主机都有专用配置:

<VirtualHost "IP:PORT">
SeverName
DocumentRoot ""
</VirtualHost>
#大多数用在中心主机的配置都可在虚拟主机中使用
ServerAlias #虚拟主机的别名
ErrorLog
CustomLog
<Directory "">
</Directory>

下面由三个示例来说明虚拟主机的配置

[root@root ~]# mkdir -pv /vhosts/{web1,web2,web3,web4}/htdocs
mkdir: created directory `/vhosts'
mkdir: created directory `/vhosts/web1'
mkdir: created directory `/vhosts/web1/htdocs'
mkdir: created directory `/vhosts/web2'
mkdir: created directory `/vhosts/web2/htdocs'
mkdir: created directory `/vhosts/web3'
mkdir: created directory `/vhosts/web3/htdocs'
mkdir: created directory `/vhosts/web4'
mkdir: created directory `/vhosts/web4/htdocs'
[root@root ~]# vim /vhosts/web1/htdocs/index.html
page at web1
[root@root ~]# vim /vhosts/web2/htdocs/index.html
page at web2
[root@root ~]# ip addr add 192.168.1.4/24 dev eth0
[root@root ~]# ip addr list
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP q
len 1000
link/ether 00:0c:29:01:9c:d0 brd ff:ff:ff:ff:ff:ff
inet `192.168.1.3/24` brd 192.168.1.255 scope global eth0
inet `192.168.1.4/24`scope global secondary eth0
# `` 仅表示强调
inet6 fe80::20c:29ff:fe01:9cd0/64 scope link
valid_lft forever preferred_lft forever

示例1:基于ip

<VirtualHost 192.168.1.3:80> 
ServerName web1.willie.com
DocumentRoot "/vhosts/web1/htdocs"
</VirtualHost>
<VirtualHost 192.168.1.4:80> 
ServerName web2.willie.com
DocumentRoot "/vhosts/web2/htdocs"
</VirtualHost>
[root@root ~]# httpd -t #测试语法是否正确
[root@root ~]# service httpd reload

b2dd95013570a85ebad22a76c4bfb17b.png

726d5b9cc6c807be22706b26fb44f55e.png

示例2:基于port

<VirtualHost 192.168.1.4:80> 
ServerName web2.willie.com
DocumentRoot "/vhosts/web2/htdocs"
</VirtualHost>
<VirtualHost 192.168.1.4:8080> 
ServerName web3.willie.com
DocumentRoot "/vhosts/web3/htdocs"
</VirtualHost>
Listen 8080 #确保监听8080端口
[root@root ~]# service httpd restart #端口改变,重启服务

7f5f8e4336b720ac80935c9f012df5ee.png

16fa1e6c8328c14f2dc149a9e54944e5.png

示例3:基于hostname

<VirtualHost 192.168.1.3:80>
ServerName web1.willie.com 
DocumentRoot "/vhosts/web1/htdocs"
</VirtualHost>
<VirtualHost 192.168.1.3:80>
ServerName web2.willie.com 
DocumentRoot "/vhosts/web2/htdocs"
</VirtualHost>
<VirtualHost 192.168.1.3:80>
ServerName web3.willie.com 
DocumentRoot "/vhosts/web3/htdocs"
</VirtualHost>
[root@root ~]# service httpd reload

因为没有配DNS,我们用另外一台虚拟机修改hosts文件做访问

[root@localhost ~]# curl http://web1.willie.com
page at web1
[root@localhost ~]# curl http://web2.willie.com
page at web2
[root@localhost ~]# curl http://web3.willie.com
page at web3

原创文章,作者:Net17_得得,如若转载,请注明出处:http://www.178linux.com/21446

(0)
Net17_得得Net17_得得
上一篇 2016-07-02 19:23
下一篇 2016-07-03 14:58

相关推荐

  • 马哥教育网络班第22期+第14周作业

    week14: 系统的INPUT和OUTPUT默认策略为DROP; 1、限制本地主机的web服务器在周一不允许访问;新请求的速率不能超过100个每秒; web服务器包含了admin字符串的页面不允许访问;web服务器仅允许响应报文离开本机; 2、在工作时间,即周一到周五的8:30-18:00,开放本机的ftp服务给172.16.0.0网络中的主机访问; 数据…

    Linux干货 2016-12-12
  • 2016.10.12 成为了马帮的一员!

    未来的6个月内,好好学习天天向上!

    Linux干货 2016-10-19
  • Unix与linux的发展历程以及linux的发行版

    Unix的发展与诞生是有源头的,早期的时候,为了生产处多任务操作系统,Bell,MIT,GE这三个单位合作要制作一款多任务操作系统,也就是multitasks,这款操作系统后来是研制成功了,但是往后的目标越来越大也越来越模糊,最终这三家单位也就相继退出了这个项目。 bell实验室的Ken Thompson因为之前在multitasks运行过一款游戏,spac…

    Linux干货 2016-10-30
  • Linux 文本编辑器三剑客之 sed

    参考手册: http://www.gnu.org/software/sed/manual/sed.html 转载请注明:马哥教育!!

    Linux干货 2017-01-12
  • 文件查询、yum安装等零散知识点总结

    归纳重要知识点:文件查询、Linux配置文件、文件的压缩与归档、yum安装包文件   这篇博客介绍以前遗落的重要知识点进行归纳总结,分为四大块:文件查询命令、全局与个人配置文件、文件的压缩与归档、yum命令安装程序包的相关条件与操作。下面结合个人理解与学习内容一一进行总结。     一.文件查询命令locate与find &nb…

    Linux干货 2016-08-26
  • Linux软件包管理之rpm和yum的使用

    rpm命令的使用 什么是RPM? rpm:RPM Package Manager (原Redhat Package Manager) Linux 软件包管理工具 特定的程序由应用程序组成;     GPL:源码     glibs:标准的C库 常见Linux发行版的软件包管理器:…

    Linux干货 2016-08-25