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

相关推荐

  • 系统日志和loganalyzer

    作为运维人员,熟悉系统日志是一项基本功。本文将介绍centos6的系统日志rsyslog及loganalyzer工具。 简介 系统日志:记录历史事件,通常都是按时间顺序将发生的事件予以记录,linux上的日志分为syslogd(系统进程相关日志)和klogd(内核事件日志) centos5:syslog    缺点:不能进行并行数据存储,…

    Linux干货 2016-03-20
  • ifconfig命令学习

    ifconfig命令 网络配置 ifconfig命令被用于配置和显示Linux内核中网络接口的网络参数。用ifconfig命令配置的网卡信息,在网卡重启后机器重启后,配置就不存在。要想将上述的配置信息永远的存的电脑里,那就要修改网卡的配置文件了。 语法 ifconfig(参数) 参数 add<地址>:设置网络设备IPv6的ip地址; del&lt…

    Linux干货 2017-07-02
  • haproxy 动静分离负载均衡、​stats页面实现​。

    实验环境:一台主机提供haproxy、nfs、mariadb,后端2台apache部署wordpress。 实验目的:haproxy使得动静分离、以及开启stats页面。 haproxy简单介绍 负载均衡的解决方案,支持4、7层,特点是单进程模型(可配置为多进程模型)单进程能支持非常大的并发链接数量(相比较其他软件)。 到今天,马哥课程中的负载均衡方案(lv…

    Linux干货 2017-02-18
  • Ubuntu之apt-get光盘源配置小结

    Ubuntu配置本地apt源的方法:    1. 命令自动配置:        mount    /dev/cdrom   /mnt/cdrom        apt-cdrom   ident   &nbsp…

    Linux干货 2016-03-09
  • keepalived实战之小试牛刀

    keepalived是什么 keepalived是集群管理中保证集群高可用的一个服务软件,其功能类似于heartbeat,用来防止单点故障。 keepalived工作原理 keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。 虚拟路由冗余协议,可以认为是实现路…

    Linux干货 2017-06-24
  • N26-肉肉-第二周作业

    1、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。 常用文件管理命令有cp,mv,rm  cp :copy        -i:交互式复制,覆盖之前提醒用户确认;         &n…

    Linux干货 2017-01-03