Apache的worker和prefork模式比较

Apache worker & prefork 选择prefork还是worker可以在编译时使用–with-mpm=MPM参数指定,默认为prefork, prefork prefork采用预派生子进程方式,用单独的子进程来处理 不同的请求,进程之间彼此独立。在make编译…

选择prefork还是worker可以在编译时使用–with-mpm=MPM参数指定,默认为prefork,
prefork
prefork采用预派生子进程方式,用单独的子进程来处理 不同的请求,进程之间彼此独立。在make编译和make install安装后,使用httpd -l来确定当前使用的MPM是prefork.c。查看httpd-mpm.conf配置文件,里面包含如下默认的配置段:
<IfModule prefork.c>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 0
</IfModule>
prefork 控制进程在最初建立“StartServers”个子进程后,为了满足MinSpareServers设置的需要创建一个进程,等待一秒钟,继续创建两 个,再等待一秒钟,继续创建四个……如此按指数级增加创建的进程数,最多达到每秒32个,直到满足MinSpareServers设置的值为止。这种模式 可以不必在请求到来时再产生新的进程,从而减小了系统开销以增加性能。MaxSpareServers设置了最大的空闲进程数,如果空闲进程数大于这个 值,Apache会自动kill掉一些多余进程。这个值不要设得过大,但如果设的值比MinSpareServers小,Apache会自动把其调整为 MinSpareServers+1。如果站点负载较大,可考虑同时加大MinSpareServers和MaxSpareServers。 MaxRequestsPerChild设置的是每个子进程可处理的请求数。每个子进程在处理了“MaxRequestsPerChild”个请求后将自 动销毁。0意味着无限,即子进程永不销毁。虽然缺省设为0可以使每个子进程处理更多的请求,但如果设成非零值也有两点重要的好处:1、可防止意外的内存泄 漏。2、在服务器负载下降的时侯会自动减少子进程数。因此,可根据服务器的负载来调整这个值。MaxClients是这些指令中最为重要的一个,设定的是 Apache可以同时处理的请求,是对Apache性能影响最大的参数。其缺省值150是远远不够的,如果请求总数已达到这个值(可通过ps -ef|grep http|wc -l来确认),那么后面的请求就要排队,直到某个已处理请求完毕。这就是系统资源还剩下很多而HTTP访问却很慢的主要原因。虽然理论上这个值越大,可以 处理的请求就越多,但Apache默认的限制不能大于256。ServerLimit指令无须重编译Apache就可以加大MaxClients。
<IfModule prefork.c>
ServerLimit 10000
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 10000
MaxRequestsPerChild 0
</IfModule>
Worker
相对于prefork,worker全新的支持多线程和多进程混合模型的MPM。由于 使用线程来处理,所以可以处理相对海量的请求,而系统资源的开销要小于基于进程的服务器。但是,worker也使用了多进程,每个进程又生成多个线程,以 获得基于进程服务器的稳定性。在configure –with-mpm=worker后,进行make编译、make install安装。在缺省生成的httpd-mpm.conf中有以下默认配置段:
<IfModule worker.c>
StartServers 2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
</IfModule>
Worker 由主控制进程生成“StartServers”个子进程,每个子进程中包含固定的ThreadsPerChild线程数,各个线程独立地处理请求。同样, 为了不在请求到来时再生成线程,MinSpareThreads和MaxSpareThreads设置了最少和最多的空闲线程数;而MaxClients 设置了同时连入的clients最大总数。如果现有子进程中的线程总数不能满足负载,控制进程将派生新的子进程。MinSpareThreads和 MaxSpareThreads的最大缺省值分别是75和250。这两个参数对Apache的性能影响并不大,可以按照实际情况相应调节。 ThreadsPerChild是worker MPM中与性能相关最密切的指令。ThreadsPerChild的最大缺省值是64,如果负载较大,64也是不够的。这时要显式使用 ThreadLimit指令,它的最大缺省值是20000。Worker模式下所能同时处理的请求总数是由子进程总数乘以ThreadsPerChild 值决定的,应该大于等于MaxClients。如果负载很大,现有的子进程数不能满足时,控制进程会派生新的子进程。默认最大的子进程总数是16,加大时 也需要显式声明ServerLimit(最大值是20000)。需要注意的是,如果显式声明了ServerLimit,那么它乘以 ThreadsPerChild的值必须大于等于MaxClients,而且MaxClients必须是ThreadsPerChild的整数倍,否则 Apache将会自动调节到一个相应值。
<IfModule worker.c>
ServerLimit 25
ThreadLimit 200
StartServers 3
MaxClients 2000
MinSpareThreads 50
MaxSpareThreads 200
ThreadsPerChild 100
MaxRequestsPerChild 0
</IfModule>
下面是利用Apache自带的测试工具ab对Server进行测试的情况(设定请求的index页面为6bytes),cpu%为cpu占用率,mem为内存使用量(M为单位),RequestsPerSecond为每秒处理的请求数。
1、Prefor方式
(ServerLimit,StartServer,MinSpareServers,MaxSpareServers,MaxClients,MaxRequestPerChild)
-n/-c(ab参数) Cpu% Mem
Requestspersecond
(-,5,5,10,150,0)
100000/100 28.8 285 8434
100000/200 29.2 304 8032
100000/500 25.3 323 7348
100000/1000 24.4 330 5886
(10000,5,5,10,500,0)
100000/100 28.7 371 8345
100000/200 27.4 389 7929
100000/500 24.9 417 7229
100000/1000 23.4 437 6676
(10000,5,5,10,1000,0)
100000/100 28.8 408 8517
100000/200 27.0 422 8045
100000/500 24.2 455 7236
100000/1000 22.5 470 6570
(10000,5,5,10,1500,0)
100000/100 29.6 330 8407
100000/200 28.1 349 8014
100000/500 26.4 380 7290
100000/1000 24.0 400 6686
2、Worker方式
(ServerLimt,Threadlimt,Startservers,MaxClients,MinspareThread,MaxspareThread,ThreadperChild,MaxRequestPerChild)
-n/-c(ab参数) cpu% mem RequestsperSecond
(50,500,5,10000,50,200,200,0)
100000/100 18.6 188 6020
100000/200 20.1 195 5892
100000/500 19.8 209 5708
100000/1000 22.2 218 6081
(100,500,5,10000,50,200,100,0)
100000/100 24.5 240 6919
100000/200 23.6 247 6798
100000/500 24.6 254 6827
100000/1000 22.3 271 6114
(200,500,5,10000,50,200,50,0)
100000/100 27.3 301 7781
100000/200 27.4 307 7789
100000/500 26.0 320 7141
100000/1000 21.8 344 6110
相对来说,prefork方式速度要稍高于worker,然而它需要的cpu和memory资源也稍多于woker。

apache日志轮询

[root@bruce httpd2.4.18]# cd /home/bruce/tools/
[root@bruce tools]# wget http://cronolog.org/download/cronolog-1.6.2.tar.gz

[root@bruce tools]# tar zxvf cronolog-1.6.2.tar.gz

[root@bruce cronolog-1.6.2]# ./configure

[root@bruce cronolog-1.6.2]# make

[root@bruce cronolog-1.6.2]# make install

[root@bruce cronolog-1.6.2]# vi /etc/httpd2.4.18/extra/httpd-vhosts.conf

<VirtualHost *:80>
ServerAdmin 1340618494@qq.com
DocumentRoot “/usr/local/httpd2.4.18/htdocs/blog”
ServerName blog.etiantian.org
ServerAlias etiantian.org
ErrorLog “logs/blog-error_log”
#CustomLog “logs/blog-access_log” common
CustomLog “|/usr/local/sbin/cronolog /app/logs/access_www_%Y%m%d.log” combined
</VirtualHost>

web目录和文件权限的配置等

[root@bruce httpd2.4.18]# ll -l /usr/local/httpd/htdocs/
total 8
drwxr-xr-x. 2 root root 4096 Jan 31 14:31 blog
-rw-r–r–. 1 root root   45 Jun 12  2007 index.html

目录755,文件644.是最安全的设定。上传文件单独设置上传服务器

 

三位数字代表9位的权限,分成3部分,第一部分3位表示所有者的权限,第二部分3位表示同组用户权限,第三部分3位表示其他用户权限,r代表读取权限等于4,w代表写入权限等于2,x代表执行权限等于1。

比如777,第一位7等于4+2+1,所以就是rwx,所有者有读取、写入、执行的权限,第二位7也是4+2+1,rwx,同组用户具有读取、写入、执行权限,第三位7,代表其他用户有读取、写入、执行的权限。

比如744,第一位7等于4+2+1,rwx,所有者具有读取、写入、执行权限,第二位4等于4+0+0,r–,同组用户只有读取权限、第三位4,也是r–,其他用户只有读取权限。

Apache2.2和Apache2.4中httpd.conf配置文件的异同

Windows环境从Apache2.2改成Apache2.4后httpd.conf中的设置异同。

1、权限设定方式变更

2.2使用Order Deny / Allow的方式,2.4改用Require

apache2.2:

Order deny,allow
Deny from all

apache2.4:

Require all denied

此处比较常用的有如下几种:

Require all denied

Require all granted

Require host xxx.com

Require ip 192.168.1 192.168.2

Require local

注意:若有设定在htaccess文件中的也要修改

2、设定日志纪录方式变更

RewriteLogLevel 指令改为 logLevel

LOGLEVEL设置第一个值是针对整个Apache的预设等级,后方可以对指定的模块修改此模块的日志记录等级

比如:

LogLevel warn rewrite: warn

3、Namevirtualhost 被移除

4、需载入更多的模块

开启Gzip在apache2.2中需载入mod_deflate,apache2.4中需载入mod_filter和mod_deflate

开启SSL在apache2.2中需载入mod_ssl,apache2.4中需载入mod_socache_shmcb和mod_ssl

5、在windows环境建议的设置

EnableSendfile Off
EnableMMAP Off

当Log日志出现AcceptEx failed等错误时建议设置

AcceptFilter http none
AcceptFilter https none

说明:Win32DisableAcceptEx在apache2.4中被AcceptFilter None取代

6、Listen设定的调整

以443为例,不可以只设定Listen 443

会出现以下错误:

(OS 10048)一次只能用一个通讯端地址(通讯协定/网路位址/连接) : AH00072: make_sock: could not bind to address [::]:443

(OS 10048)一次只能用一个通讯端地址(通讯协定/网路位址/连接) : AH00072: make_sock: could not bind to address 0.0.0.0:443

AH00451: no listening sockets available, shutting down

AH00015: Unable to open logs

因此需指定监听的IP,可设定多个

例如:

Listen 192.168.2.1:443
Listen 127.0.0.1:443

Apache2.4和Apache2.2访问控制配置语法对比

一、访问控制

在Apache2.2版本中,访问控制是基于客户端的主机名、IP地址以及客户端请求中的其他特征,使用Order(排序), Allow(允许), Deny(拒绝),Satisfy(满足)指令来实现。

在Apache2.4版本中,使用mod_authz_host这个新的模块,来实现访问控制,其他授权检查也以同样的方式来完成。旧的访问控制语句应当被新的授权认证机制所取代,即便Apache已经提供了mod_access_compat这一新模块来兼容旧语句。

这里有一些实例,用新方法取代旧语句实现相同的访问控制

实例1:所有请求都被拒绝

Apache2.2 配置:

复制代码代码如下:
Order deny,allow #排序,先拒绝后允许
Deny from all #拒绝所有

Apache2.4 配置:

复制代码代码如下:
Require all denied #拒绝所有

实例2:所有请求都被允许

Apache2.2 配置:

复制代码代码如下:
Order allow,deny #排序,先允许后拒绝
Allow from all #允许所有

Apache2.4 配置:

复制代码代码如下:
Require all granted #拒绝所有

实例3:example.org所有请求都被允许,其他拒绝

Apache2.2 配置:

复制代码代码如下:
Order Deny,Allow #排序,先拒绝后允许
Deny from all #拒绝所有
Allow from example.org #允许example.org

Apache2.4 配置:

复制代码代码如下:
Require host example.org #拒绝所有

二、Apache Require 指令

了解更多require指令用法:《Apache Module mod_authz_core》

附:常见访问控制指令

复制代码代码如下:
Require all granted #允许所有
Require all denied #拒绝所有
Require env env-var [env-var] … #允许,匹配环境变量中任意一个
Require method http-method [http-method] … #允许,特定的HTTP方法
Require expr expression #允许,表达式为true
Require user userid [ userid ] … #允许,特定用户
Require group group-name [group-name] … #允许,特定用户组
Require valid-user # #允许,有效用户
Require ip 10 172.20 192.168.2 #允许 特定IP

Apache的Order Allow,Deny 详解

Allow和Deny可以用于apache的conf文件或者.htaccess文件中(配合Directory, Location, Files等),用来控制目录和文件的访问授权。

所以,最常用的是:
Order Deny,Allow
Allow from All

注意“Deny,Allow”中间只有一个逗号,也只能有一个逗号,有空格都会出错;单词的大小写不限。上面设定的含义是先设定“先检查禁止设定,没有禁止的全部允许”,而第二句没有Deny,也就是没有禁止访问的设定,直接就是允许所有访问了。这个主要是用来确保或者覆盖上级目录的设置,开放所有内容的访问权。

按照上面的解释,下面的设定是无条件禁止访问:
Order Allow,Deny
Deny from All

如果要禁止部分内容的访问,其他的全部开放:
Order Deny,Allow
Deny from ip1 ip2
或者
Order Allow,Deny
Allow from all
Deny from ip1 ip2

apache会按照order决定最后使用哪一条规则,比如上面的第二种方式,虽然第二句allow允许了访问,但由于在order中allow不是最后规则,因此还需要看有没有deny规则,于是到了第三句,符合ip1和ip2的访问就被禁止了。注意,order决定的“最后”规则非常重要,下面是两个错误的例子和改正方式:

Order Deny,Allow
Allow from all
Deny from domain.org
错误:想禁止来自domain.org的访问,但是deny不是最后规则,apache在处理到第二句allow的时候就已经匹配成功,根本就不会去看第三句。
解决方法:Order Allow,Deny,后面两句不动,即可。

Order Allow,Deny
Allow from ip1
Deny from all
错误:想只允许来自ip1的访问,但是,虽然第二句中设定了allow规则,由于order中deny在后,所以会以第三句deny为准,而第三句的范围中又明显包含了ip1(all include ip1),所以所有的访问都被禁止了。
解决方法一:直接去掉第三句。
解决方法二:
Order Deny,Allow
Deny from all
Allow from ip1

总则——

影响最终判断结果的只有两点:

1. order语句中allow、deny的先后顺序;

2. allow、deny语句中各自包含的范围。

温馨提醒——

1. 修改完配置后要保存好并重启Apache服务,配置才能生效;

2. 开头字母不分大小写;

3. allow、deny语句不分先后顺序,谁先谁后不影响最终判断结果;但都会被判断到;

4. order语句中,“allow,deny”之间“有且只有”一个逗号(英文格式的),而且先后顺序很重要;

5. Apache有一条缺省规则,“order allow,deny”本身就默认了拒绝所有的意思,因为deny在allow的后面;同理,“order deny,allow”本身默认的是允许所有;当然,最终判断结果还要综合下面的allow、deny语句中各自所包含的范围;(也就是说order语句后面可以没有allow、deny语句)

6. allow、deny语句中,第二个单词一定是“from”,否则Apache会因错而无法启动,

7. “order allow,deny”代表先判断allow语句再判断deny语句,反之亦然。

最常用命令

[root@bruce httpd2.4.18]# netstat -lnt           查看端口

[root@bruce httpd2.4.18]# lsof -i tcp:80       反查端口的服务

[root@bruce httpd2.4.18]# lsof -i :80       反查端口的服务

[root@bruce httpd2.4.18]# ps -ef|grep http    查看进程

[root@bruce logs]# tail -100 error_log           查看日志

[root@bruce etc]# /usr/local/httpd/bin/apachectl -t   检查apache配置文件的语法

 

centOS 6.5关闭防火墙步骤

关闭命令:  service iptables stop
永久关闭防火墙:chkconfig iptables off

两个命令同时运行,运行完成后查看防火墙关闭状态
service iptables status

 

InnoDB还是MyISAM 再谈MySQL存储引擎的选择

 

两种类型最主要的差别就是Innodb 支持事务处理与外键和行级锁.而MyISAM不支持.所以MyISAM往往就容易被人认为只适合在小项目中使用。

我作为使用MySQL的用户角度出发,Innodb和MyISAM都是比较喜欢的,但是从我目前运维的数据库平台要达到需求:99.9%的稳定性,方便的扩展性和高可用性来说的话,MyISAM绝对是我的首选。

原因如下:

1、首先我目前平台上承载的大部分项目是读多写少的项目,而MyISAM的读性能是比Innodb强不少的。

2、MyISAM的索引和数据是分开的,并且索引是有压缩的,内存使用率就对应提高了不少。能加载更多索引,而Innodb是索引和数据是紧密捆绑的,没有使用压缩从而会造成Innodb比MyISAM体积庞大不小。

3、从平台角度来说,经常隔1,2个月就会发生应用开发人员不小心update一个表where写的范围不对,导致这个表没法正常用了,这个时候MyISAM的优越性就体现出来了,随便从当天拷贝的压缩包取出对应表的文件,随便放到一个数据库目录下,然后dump成sql再导回到主库,并把对应的binlog补上。如果是Innodb,恐怕不可能有这么快速度,别和我说让Innodb定期用导出xxx.sql机制备份,因为我平台上最小的一个数据库实例的数据量基本都是几十G大小。

4、从我接触的应用逻辑来说,select count(*) 和order by 是最频繁的,大概能占了整个sql总语句的60%以上的操作,而这种操作Innodb其实也是会锁表的,很多人以为Innodb是行级锁,那个只是where对它主键是有效,非主键的都会锁全表的。

5、还有就是经常有很多应用部门需要我给他们定期某些表的数据,MyISAM的话很方便,只要发给他们对应那表的frm.MYD,MYI的文件,让他们自己在对应版本的数据库启动就行,而Innodb就需要导出xxx.sql了,因为光给别人文件,受字典数据文件的影响,对方是无法使用的。

6、如果和MyISAM比insert写操作的话,Innodb还达不到MyISAM的写性能,如果是针对基于索引的update操作,虽然MyISAM可能会逊色Innodb,但是那么高并发的写,从库能否追的上也是一个问题,还不如通过多实例分库分表架构来解决。

7、如果是用MyISAM的话,merge引擎可以大大加快应用部门的开发速度,他们只要对这个merge表做一些select count(*)操作,非常适合大项目总量约几亿的rows某一类型(如日志,调查统计)的业务表。

当然Innodb也不是绝对不用,用事务的项目如模拟炒股项目,我就是用Innodb的,活跃用户20多万时候,也是很轻松应付了,因此我个人也是很喜欢Innodb的,只是如果从数据库平台应用出发,我还是会首选MyISAM。

另外,可能有人会说你MyISAM无法抗太多写操作,但是我可以通过架构来弥补,说个我现有用的数据库平台容量:主从数据总量在几百T以上,每天十多亿 pv的动态页面,还有几个大项目是通过数据接口方式调用未算进pv总数,(其中包括一个大项目因为初期memcached没部署,导致单台数据库每天处理 9千万的查询)。而我的整体数据库服务器平均负载都在0.5-1左右。

Apache httpd-2.4.10编译安装

系统: CentOS6.5_64
软件: httpd-2.4.10.tar.bz2
依赖: openssl-1.0.1j.tar.gz、apr-1.5.1.tar.bz2、apr-util-1.5.4.tar.bz2、pcre-devel
下载地址: http://www.openssl.org/source/            openssl
下载地址: http://httpd.apache.org/download.cgi      httpd
下载地下: http://apr.apache.org/download.cgi        apr,apr-util   是Apache的项目

pcre-devel 我们的系统安装光盘上就有。

首先我们先说明一些情况, 我们已经安装了基础开发包。

我们的系统上已经安装了apr和openssl,但是版本太低了,而它们还会被其它的软件所依赖,所以在不影响其它软件的情况下,就只能编译安装新的版本了。 而原来的httpd也会被其它的软件所依赖,不可以卸载。

1. 先把pcre-devel装上,直接yum安装。

1 yum install pcre-devel -y                  #-y 是直接安装的意思,敬我以前连-y都不知道。

2. 安装apr-1.5.1, 这个版本是我昨天下载的,现在是最新的版本。 低版本会安装不上event模块。

1
2
./configure –prefix=/usr/local/apr1.5      #只来个安装位置就可以
make && make install                        #稍等片片刻。

3. 安装apr-util-1.5.4.

1
2
3
4
./configure –prefix=/usr/local/apr1.5 –with-apr=/usr/local/apr1.5
#这个是apr的工具集,它依赖于上面的那个apr, 所以加上–with来指定我们安装apr的目录。
#跟apr安装在一个目录,现在看来没有什么问题。
make && make install

4. 安装openssl-1.0.1j

1
2
3
./config –prefix=/usr/local/openssl1j enable-shared
# enable-shared没有这一项, httpd编译会报错。  有点奇怪的是,在虚拟机上会报错,提示要加上-fPID。
make $$ make install

导出库文件,新建/etc/ld.so.conf.d/openssl1j.conf文件。    https会用到新版本的库文件。

1
2
vim /etc/ld.so.conf.d/openssl1j.conf
ldconfig

文件内容就写你的openssl安装目录下的lib的路径。 如:

1 /usr/local/openssl1j/lib

5. 安装httpd2.4.10

1
2
3
4
./configure –prefix=/usr/local/httpd2.4 –sysconfdir=/etc/httpd2.4 –enable-so –enable-ssl –enable-rewrite –enable-cgi –with-zlib –with-pcre –with-apr=/usr/local/apr1.5/ –with-apr-util=/usr/local/apr1.5/ –with-ssl=/usr/local/openssl1j/ –enable-modules=most –enable-mpms-shared=all –with-mpm=event
make && make install

#–prefix 安装目 录   –sysconfdir 配置文件目录   –enable-so 开启DSO动态装卸shared模块    –enable-ssl https的功能    –enable-rewrite 地址重写   –enable-cgi CGI脚本功能  –with-zlib 压缩功能的函数库   –with-pcre  perl库    刚才安装的软件的目录   –enable-modules=most 编译常用的模块  –enable-mpms-shared=all 所有的动态模块  后面这个默认挂载MPM模块event.

6. 杂项
(1)去httpd的安装目录看一下结果。  一切OK的话就可以下面的了。
(2) 把httpd的头文件符号链接到/usr/include      #不是必须的,怕以后有软件会用。

1 ln -s /usr/local/httpd2.4/include/ /usr/include/httpd2.4

(3) 新建/etc/profile.d/httpd2.4.sh文件,添加进PATH变量。

1
2
3
4
5
vim /etc/profile.d/httpd2.4.sh            #写入文件内容,执行一个source
source /etc/profile.d/httpd2.4.sh

文件内容:
export PATH=/usr/local/httpd2.4/bin:$PATH

注意路径要写在PATH的前头,这样bash先找到的就是新的httpd了。 不然自动打开的又会是以前的那个httpd了。

1
2
[iyunv@CentOS-Office bin]# echo $PATH
/usr/local/httpd2.4/bin:/usr/local/httpd2.4/bin:/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

(4)停止你的老httpd, 来看看新的可不可以运行吧。

1
2
3
4
5
6
7
[iyunv@CentOS-Office openssl1j]# httpd
AH00557: httpd: apr_sockaddr_info_get() failed for CentOS-Office
AH00558: httpd: Could not reliably determine the server’s fully qualified domain name, using 127.0.0.1. Set the ‘ServerName’ directive globally to suppress this message
[iyunv@CentOS-Office openssl1j]# httpd -v        #查看版本
Server version: Apache/2.4.10 (Unix)
Server built:   Nov 10 2014 11:10:33
[iyunv@CentOS-Office openssl1j]#


看来我这里暂时是可以运行了。 启动httpd的时候报的错,只要自已的主机名可以解析自已的IP,就没事了。 嗯,在我们这种只是做实验,做练习来说。 添加到/etc/hosts文件里是个不错的办法。
像我这里,加上一行:

172.16.2.0   CentOS-Office
就OK了。
(5) 来个服务脚本,可以用service来启动关闭。
为了避免麻烦,直接把原来的httpd的服务脚本复制一下,改吧改吧。

1
2
cp /etc/init.d/httpd /etc/init.d/httpd
vim /etc/init.d/httpd

先贴一下要改的部分, 占占版面。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
40
41 # Path to the apachectl script, server binary, and short-form for messages.
42 apachectl=/usr/sbin/apachectl            #这一行要改,我就写下边了。
apachectl=/usr/local/httpd2.4/bin/apachectl      #注意路径,看你安装在哪了。

43 httpd=${HTTPD-/usr/sbin/httpd}            #这一行也要改
httpd=/usr/local/httpd2.4/bin/httpd       #因为httpd2.4可以动态加载MPM模块。
#所以就不用运行不同MPM模块的程序,指定这一个就好。
#
44 prog=httpd
45 pidfile=${PIDFILE-/var/run/httpd/httpd.pid}   #这一行改
pidfile=/var/run/httpd2.4/httpd2.4.pid        #不是默认路径,还要改httpd配置文件,
#可以把路径改成你的安装目录下的logs目录,默认是在这里。

46 lockfile=${LOCKFILE-/var/lock/subsys/httpd}   #这一行改
lockfile=/var/lock/subsys/httpd2.4            #

47 RETVAL=0
48 STOP_TIMEOUT=${STOP_TIMEOUT-10}
49

OK 保存退出。
上边的PID文件的路径如果用默认路径,就不用下边这几行了。

1
2
3
4
5
6
[iyunv@CentOS-Office run]# mkdir httpd2.4
[iyunv@CentOS-Office run]# chmod 700 httpd2.4/        #这个文件是由第一个httpd进程创建的
#这个进程是root启动的。root的权限。
[iyunv@CentOS-Office httpd2.4]# vim /etc/httpd2.4/httpd.conf
文件里面加入这一行:
pidFile “/var/run/httpd2.4/httpd2.4.pid”

好啦, 如果现在有httpd进程在运行,  killall httpd
然后就可以启动试试啦。

1
2
[iyunv@CentOS-Office run]# service httpd start
正在启动 httpd:                                           [确定]

这样暂时就算是安装完成了.


注意: httpd2.4的脚本是httpd , 而原来httpd2.2成了httpd.bak.
我们的脚本名称还是httpd. 以前httpd2.2的时候添加过chkconfig的话,就不用设置了。
chkconfig设置:

1
2
3
4
5
6
7
[iyunv@CentOS-Office run]# chkconfig –list httpd
httpd 服务支持 chkconfig,但它在任何级别中都没有被引用(运行“chkconfig –add httpd”)
[iyunv@CentOS-Office run]# chkconfig —add httpd
[iyunv@CentOS-Office run]# chkconfig httpd on
[iyunv@CentOS-Office run]# chkconfig –list httpd
httpd              0:关闭    1:关闭    2:启用    3:启用    4:启用    5:启用    6:关闭
[iyunv@CentOS-Office run]#