首页 > 代码库 > CentOS6.5 LAMP之一编译httpd

CentOS6.5 LAMP之一编译httpd

apache服务器程序

    命令httpd:

-t 测试配置文件

-l 静态模块

-D DUMP_MODULES 动态模块

-h获得帮助

-M:相当于-D DUMP_MODULES

-D DUMP_VHOSTS:列出虚拟主机

htpasswd:

为基于文件basic认证创建和更新用户认证文件

apachectl 自带脚本

apachectl start 开启httpd服务

httpd服务控制工具;

ab:apache benchmark Apache性能基准测试工具

apxs:httpd得以扩展使用第三方模块的工具 (钩子接口)钩住第三方模块

htcacheclean:

磁盘缓存清理工具

htdigest:

   为digest摘要认证创建和更新用户认证文件

httxtt2dbm:

    为rewrite map(重写映射表)创建dbm格式的文件

rotatelogs:

   不关闭httpd而切换其使用日志的工具(如果站点访问量较大,月访问量文件可能到达亿级别了),当日志文件增长速度过快,access_log,我们的rotatelogs可以把原来的access_log重命名为access_log.1,进而生成一个新的access_log让我们的web服务写日志。平滑的实现日志切割

suexec:运行进程的用户身份,在配置文件中。

当httpd进程需要以另外用户身份去访问资源文件时,可以suexec做临时身份切换。

ab工具的初步使用:(同类的工具:http_load,webbench seige)

ab不能真实模拟场景

真正的工作环境大概分三种:

1、生产线上环境:提供真正服务

2、测试 环境

3、开发环境

ab [options] URL

   -c # 模拟发起多少个并发请求

   -n # 模拟的总请求数

-n 的值一定要大于等于 –c 的值

如:

[root@localhost ~]# ab -c 50 -n 500 http://www.aaabig.com/index.html
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking www.aaabig.com (be patient)
Completed 100 requests

一个鼓吹1000MB带宽的假设传输速率是125mb/s 1000/8=125mb/s

 

CentOS6编译安装httpd2.4

httpd2.4有哪些新特性呢?

1)MPM支持在运行时装载:装载方式:--enable-mpms-shared=all 等于把所有模块都编译进来编译成共享模块

--with-mpm={prefork|worker|event}

2)支持event模块 mpm

3)支持异步读写

4)支持每个模块和每个目录分别使用不同的日志级别

5)支持每请求的配置:<IF> <Elseif>

6)支持增强版的表达式分析器

7)支持毫秒级的keep alive的timeout

8)支持FQDN的虚拟主机,不在需要NameVirtualhost指令

9)支持用户使用自定义变量!

10)新增了一些模块:mod_proxy_fcgi ,mode_ratelimit

mod_request(对用户请求做更大作用)mod_remoteip(对远端的ip地址做更强大的控制能力)

11)修改了一些配置机制:不再支持使用order,allow,deny,基于ip的访问控制,改为require

 

CentOS6默认是不太支持安装http2.4,很多特性无非启动,如果非要安装,需要手动安装好几个版本。

 

 

httpd程序依赖于apr和apr-until(httpd2.4依赖于apr1.4以上的版本)

apr:apache portable runtime(相当(于httpd运行在虚拟机)不管在什么操作系统平台上,它会无视底层的差异

 

1.安装之前,先把http服务停掉

2.查看是否安装过包组 Development Tools Server platform

3使用rpm –qa | grep apr*查看版本

httpd2.4需要的组建差不多下载下来了,放到/tmp目录下,叫做

image 打红勾那三个

先解压缩apr-1.5.0.tar.bz2,进而cd进该目录

image ./configure --help

image 默认安装在/usr/local目录下,./configure --prefix=/usr/local/apr-1.5为了不覆盖CentOS原有的apr1.5,所以才使用此选项。

如果安装不存在问题,就直接make&&make install就ok了

笔者在安装时候出现过的问题跟大家分享一下,

make[1]: execvp: /root/20140813/apr-1.5.1/build/mkdir.sh: Permission denied,出现权限denied,肯定是mkdir.sh本身没有写权限,于是chmod a+x 给它一个全部人都可以执行的写权限。

 

笔者这里曾经还有错误,显示:libtool: link: you must specify an output file libtool: link: Try `libtool --help --mode=link‘ for m…

笔者通过找问题,感觉曾经是由xftp—>windows—>CentOS 6.5上,这里configure刚拷过来的时候也没有x权限,估计肯定是转到windows时候出现了问题。

这时候安装完成,显示:

/usr/bin/install -c -m 644 apr.exp /usr/local/apr-1.5/lib/apr.exp
/usr/bin/install -c -m 644 apr.pc /usr/local/apr-1.5/lib/pkgconfig/apr-1.pc
for f in libtool shlibtool; do \
        if test -f ${f}; then /usr/bin/install -c -m 755 ${f} /usr/local/apr-1.5
    done
/usr/bin/install -c -m 755 /tmp/new/apr-1.5.1/build/mkdir.sh /usr/local/apr-1.5/buil
for f in make_exports.awk make_var_export.awk; do \
        /usr/bin/install -c -m 644 /tmp/new/apr-1.5.1/build/${f} /usr/local/apr-
    done
/usr/bin/install -c -m 644 build/apr_rules.out /usr/local/apr-1.5/build-1/apr_rules.
/usr/bin/install -c -m 755 apr-config.out /usr/local/apr-1.5/bin/apr-1-config
[root@localhost apr-1.5.1]#

于是再次用相同的方法安装另一个包叫apr-util,

[root@localhost new]# ll
total 6400
drwxr-xr-x 28 1000 1000    4096 Aug 13 15:36 apr-1.5.1
-rw-r--r--  1 root root  817569 Aug 12 23:40 apr-1.5.1.tar.bz2
-rw-r--r--  1 root root  695303 Aug 12 23:38 apr-util-1.5.3.tar.bz2
-rw-r--r--  1 root root 5031834 Aug 12 23:41 httpd-2.4.10.tar.bz2
[root@localhost new]# tar xf apr-util-1.5.3.tar.bz2
[root@localhost new]# cd apr-util-1.5.3

[root@localhost apr-util-1.5.3]# ./configure –help 注意这里有一项很关键,—with-apr

--with-apr=PATH         prefix for installed APR or the full path to
                             apr-config

你需要告诉apr-util去哪里找apr,于是我们需要指定刚才安装的apr的路径

[root@localhost apr-util-1.5.3]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr-1.5/

然后

configure: creating ./config.status
config.status: creating Makefile
config.status: creating export_vars.sh
config.status: creating build/pkg/pkginfo
config.status: creating apr-util.pc
config.status: creating apu-1-config
config.status: creating include/private/apu_select_dbm.h
config.status: creating include/apr_ldap.h
config.status: creating include/apu.h
config.status: creating include/apu_want.h
config.status: creating test/Makefile
config.status: creating include/private/apu_config.h
config.status: executing default commands
[root@localhost apr-util-1.5.3]#

安装完成

image 先解压缩httpd,老规矩,cd到该目录下来,然后./configure --help来查看帮助

这里我们列举一下安装前的长长的选项,都有哪些需要添加的:

[root@localhost httpd-2.4.10]# ./configure --prefix=/usr/local/apache24(安装在哪个目录下) --sysconfdir=/etc/httpd(配置文件的文件夹放到哪里)

--enable-so(关键,支不支持动态装卸载模块都由它来决定)

--enable-ssl 启动ssl模块!(但是在装载这项之前,需要看看是否安装过openssl-devel模块)

--enable-cgi(支不支持cgi)

--enable-rewrite(支不支持URL重写,很有用)

--with-zlib(数据报文专用的压缩库)(这里需要yum install一个叫pcre-devel的包)

--with-apr=/usr/local/apr-1.5

--with-apr-util=/usr/local/apr-util

--enable-mpms-shared=all

--with-mpm=event (选择用event模式)

--enable-modules={all|most}(选择那些模块进行编译)

编译好了以后,make && make install,经过漫长的安装,安装成功了,然后就可以启动了,首先你要ss –tnlp 确保80端口没有被占用,因为我们还有服务启动脚本,需要编辑/etc/profile.d/httpd24.sh

export PATH=/usr/local/apache/bin:$PATH

然后执行source一下该文件

[root@localhost httpd-2.4.10]# source /etc/profile.d/httpd24.sh
[root@localhost httpd-2.4.10]# echo $PATH
/usr/local/apache/bin:/usr/lib64/qt-3.3/bin:/usr/local/mysql/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

看看路径里面有了!

apachectl start

image

可以了!

image it works!

安装完以后还要有收尾工作,查看cgi-bin服务器脚本二进制程序,默认显示的it works!页面在编译安装后的/usr/local/apache24/htdocs目录下,而不在/var/www/html下,而服务器端脚本在cgi-bin目录下,error不是错误日志,而是一大堆error错误页面。还有include下的头文件们,可以基于二次开发。

如果需要把httpd24做好的头文件放到系统中去,方便做二次开发,可以使用ln -sv /usr/local/apache24/include/ /usr/include/

最后可以导出man文档帮助,vim /etc/man.config 然后加入:

MANPATH /usr/local/apache24/man

 

在httpd2.4下基于ip做访问控制

允许所有主机访问:Require all granted

拒绝所有主机访问: Require all deny

 

控制某特定主机访问:

Require ip IPADDR

Require not ip IPADDR

IPADDR:

单个ip

network/Netmask

Network/Length :172.16.0.0/16

Net:172.16

Require host HOSTNA HOSTNAME

Require not host HOSTNAME

范例:假设我不想让192.168.1.121访问我这台主机,则要在/etc/httpd/httpd.conf定义Require,并且还需要另外用<>括起来。如:

<RequireAll>
   Require not ip 192.168.1.121
   Require all granted
</RequireAll>

则用192.168.1.121连接则显示:

[root@www tmp]# elinks 192.168.1.126

image无权限!

下面来谈一下httpd2.4怎么设置虚拟主机:

先到主配置文件上找到DocumentRoot一项,注释掉,

215 #
216 #DocumentRoot "/web/htdoc"
217 <Directory "/web/htdoc">

还是在主配置文件上找到/vhost一项,找到并把前面的注释去掉

类似

# Virtual hosts
Include /etc/httpd/extra/httpd-vhosts.conf

然后找到/etc/httpd/extra/httpd-vhosts.conf文件,从里面修改

image 千万要记得用权限<Directory> </Directory>里面可以定义目录访问设定。

image  主机1

 

image 主机2