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.www58058.com/21446

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

相關推薦

  • 源碼安裝

    1.連接教室yum源: [root@localhost ~]#lftp 10.1.0.1 2.進入httpd目錄下: [root@localhost ~]#lftp10.1.0.1:/pub/Sources/sources/httpd> ls 3.下載安裝包: [root@localhost ~]#lftp10.1.0.1:/pub/Sources/s…

    Linux干貨 2016-09-19
  • Linux基礎知識(一)-linux哲學思想,基礎命令,FHS

    1.描述計算機的組成及其功能 2.按系列羅列Linux 的發行版,并描述不通發行版之間的聯系和區別. 3.描述Linux的哲學思想,并按照自己的理解對其進行解釋 4.說明Linux系統命令的使用格式,詳細介紹ifconfig,echo,tty,startx,export.pwd,history,shutdown,poweroff,reboot,hwclock…

    Linux干貨 2016-09-22
  • 第一周 Linux基礎知識

    Linux基礎

    2018-03-18
  • Linux基礎知識之用戶和組管理

    系統環境:    該博文以CentOS6.8_x86_64和CentOS7.2_x86_64系統為基礎,Xshell5遠程登錄CentOS6.8和CentOS7.2系統,分別以root身份和sjsir用戶身份登錄系統。 學習的重要問題: 一、為什么要學習用戶和組?    首先Linux區別于其他的系統的最重要的特性就是…

    Linux干貨 2016-08-02
  • M20 – 1- 第二周(2):課堂練習與作業

    課堂練習: 1、顯示/var目錄下所有以l開頭,以一個小寫字母結尾,且中間出現至少一位數字的文件和目錄 [root@centos6 ~]# ls /var/l*[[:digit:]]*[[:lower:]] ls: cannot access /var/l*[[:digit:]]*[[:lower:…

    Linux干貨 2016-08-02
  • 系統基礎之Btrfs文件系統詳解

    btrfs文件系統:技術預覽版(centos7) 描述: Btrfs(B-tree,Butter FS,Better fs),GPL授權,Orale,2007 寫實復制特性(Cow)     cp –reflink (只能在btrfs文件系統中使用) 想取代ext系統系統, 支…

    Linux干貨 2016-09-21
欧美性久久久久