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

相关推荐

  • 源码包编译安装

    程序包编译安装:      Application-VERSION-release.src.rpm–> 安装后,使用rpmbuild命令制作成二进制格式的rpm包,而后再安装      源代码 –> 预处理 –> 编译 &#8…

    Linux干货 2016-08-23
  • mariadb基础应用

    mariadb基础应用 一、 前言 MariaDB is one of the most popular database servers in the world. It’s made by the original developers of MySQL and guaranteed to stay open source. Notable users …

    Linux干货 2016-12-16
  • 自制linux系统

    本文主要通过裁剪现有Linux系统,打造一个属于自己的Linux小系统,让其能够装载网卡驱动,并配置IP地址,实现网络功能。 自制linux系统 步骤概述: 1、新建一个硬盘2、在该新硬盘上新建两个分区,一个当boot分区,一个当/分区3、格式化并且挂载两个分区4、安装grub至目标磁盘5、为grub提供配置文件6、复制内核文件和initrd文件7、创建目标…

    Linux干货 2016-09-13
  • 基本网络设置

    我们在上网的时候会遇到各种各样的问题,比如有时候网络不通,没有ip地址,或者ip地址有冲突等等,这就需要我们懂得一些网络的配置,方便以后使用。基本网络配置:主机名,ip地址,网关,DNS服务器。1、 主机名的配置第一种方法:在配置文件修改Centos7版本:vim /etc/hostname 改过配置文件后需要使其生效,命令为hostname centos7…

    2017-09-09
  • 自制一个小型Linux(附带网络功能)

      我们这次讲述一下Linux启动的启动流程以及制作一个附带网络功能的mini linux 一、叙述 二、为什么要制作这么一个小型的系统 三、怎么制作 1、制作步骤 2、将虚拟机添加网络功能 一、叙述   在制作一个小型的Linux之前,首先你得明白Linux系统的启动过程,我们用一张图来进行说明  二、为什…

    Linux干货 2016-12-21
  • mysql5.5.32多实例配置

    操作系统:CentOS release 6.7 (Final) 内核版本:2.6.32-573.el6.x86_64 mysql版本号:mysql-5.5.32 1)安装mysql所需的依赖包 # adduser mysql -s /sbin/nologin -M # mkdir -p&n…

    Linux干货 2016-12-05