一、编译安装apache
确保你的虚拟主机上没有安装rpm包版本的LAMP,需要提供一个干净的平台
1、解决依赖关系
httpd-2.4.4需要较新版本的apr和apr-util,因此需要事先对其进行升级。升级方式有两种,一种是通过源代码编译安装,一种是直接升级rpm包。这里选择使用编译源代码的方式进行
需要下载的包:
apr-1.4.6.tar.bz2
apr-util-1.4.1.tar.bz2
httpd-2.4.4.tar.bz2
1.1安装yum库
1.1.1先挂载盘
1.1.2编辑yum的配置文件
vim /etc/yum.repos.d/ server.repo
1.2安装之前先确保开发环境已经安装过了
1.3若开发环境没有安装,执行如下命令:
yum groupinstall “Development Tools” “Development Libraries”
1.4编译安装apr
注意:linux系统自带的有apr,但是版本很低,又不能卸载,因为有依赖关系,这时就需要多版本并存的机制,也就意味着我们把新版本与老版本不安装在同一位置就可以了
还有注意一点:系统时间与下载源码包的时间要一致
[root@station45 apr-1.4.6]#make #编译
[root@station45 apr-1.4.6]#make install #安装
1.5 编译安装apr-util(工具组件)
[root@station45 apr-util-1.4.1]# make
[root@station45 apr-util-1.4.1]# make install
1.6、 httpd-2.4.3编译过程也要依赖于pcre-devel软件包,需要事先安装。此软件包系统光盘自带,因此,找到并安装即可。
2、编译安装httpd-2.4.4
需要编译的内容:
#./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd --enable-so -enable-rewrite --enable-ssl --enable-cgi --enable-cgid --enable-modules=most --enable-mods-shared=most --enable-mpms-shared=all --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util –with-mpm=event
[root@station45 httpd-2.4.4]# make
[root@station45 httpd-2.4.4]# make install
补充:
(1)构建MPM为静态模块
在全部平台中,MPM都可以构建为静态模块。在构建时选择一种MPM,链接到服务器中。如果要改变MPM,必须重新构建。为了使用指定的MPM,请在执行configure脚本 时,使用参数 --with-mpm=NAME。NAME是指定的MPM名称。编译完成后,可以使用 ./httpd -l 来确定选择的MPM。 此命令会列出编译到服务器程序中的所有模块,包括 MPM。
(2)构建 MPM 为动态模块
在Unix或类似平台中,MPM可以构建为动态模块,与其它动态模块一样在运行时加载。 构建 MPM 为动态模块允许通过修改LoadModule指令内容来改变MPM,而不用重新构建服务器程序。在执行configure脚本时,使用--enable-mpms-shared选项即可启用此特性。当给出的参数为all时,所有此平台支持的MPM模块都会被安装。还可以在参数中给出模块列表。默认MPM,可以自动选择或者在执行configure脚本时通过--with-mpm选项来指定,然后出现在生成的服务器配置文件中。编辑LoadModule指令内容可以选择不同的MPM。
2.1查看selinux是否关闭
cd /usr/local/apache/
bin/apachectl start #启动apache服务
2.2网页文件在htdocs/
2.3测试
2.4 pid文件介绍
3、修改httpd的主配置文件,设置其Pid文件的路径
编辑/etc/httpd/httpd.conf,添加如下行即可:
3.1测试
4、到此我们的apache看起来已经可以工作了,但是这样启动apache服务很不方便,那在这里提供了一个脚本配置文件,可以向linux一样启动、停止、重启服务
4.1提供SysV服务脚本/etc/init.d/httpd,内容如下:这是根据rpm提供的脚本修改的
vim /etc/init.d/httpd
#!/bin/bash
#
# httpd Startup script for the Apache HTTP Server
#
# chkconfig: - 85 15
# description: Apache is a World Wide Web server. It is used to serve \
# HTML files and CGI.
# processname: httpd
# config: /etc/httpd/conf/httpd.conf
# config: /etc/sysconfig/httpd
# pidfile: /var/run/httpd.pid
# Source function library.
. /etc/rc.d/init.d/functions
if [ -f /etc/sysconfig/httpd ]; then
. /etc/sysconfig/httpd
fi
# Start httpd in the C locale by default.
HTTPD_LANG=${HTTPD_LANG-"C"}
# This will prevent initlog from swallowing up a pass-phrase prompt if
# mod_ssl needs a pass-phrase from the user.
INITLOG_ARGS=""
# Set HTTPD=/usr/sbin/httpd.worker in /etc/sysconfig/httpd to use a server
# with the thread-based "worker" MPM; BE WARNED that some modules may not
# work correctly with a thread-based MPM; notably PHP will refuse to start.
# Path to the apachectl script, server binary, and short-form for messages.
apachectl=/usr/local/apache/bin/apachectl
httpd=${HTTPD-/usr/local/apache/bin/httpd}
prog=httpd
pidfile=${PIDFILE-/var/run/httpd.pid}
lockfile=${LOCKFILE-/var/lock/subsys/httpd}
RETVAL=0
start() {
echo -n $"Starting $prog: "
LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS
RETVAL=$?
echo
[ $RETVAL = 0 ] && touch ${lockfile}
return $RETVAL
}
stop() {
echo -n $"Stopping $prog: "
killproc -p ${pidfile} -d 10 $httpd
RETVAL=$?
echo
[ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile}
}
reload() {
echo -n $"Reloading $prog: "
if ! LANG=$HTTPD_LANG $httpd $OPTIONS -t >&/dev/null; then
RETVAL=$?
echo $"not reloading due to configuration syntax error"
failure $"not reloading $httpd due to configuration syntax error"
else
killproc -p ${pidfile} $httpd -HUP
RETVAL=$?
fi
echo
}
# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status -p ${pidfile} $httpd
RETVAL=$?
;;
restart)
stop
start
;;
condrestart)
if [ -f ${pidfile} ] ; then
stop
start
fi
;;
reload)
reload
;;
graceful|help|configtest|fullstatus)
$apachectl $@
RETVAL=$?
;;
*)
echo $"Usage: $prog {start|stop|restart|condrestart|reload|status|fullstatus|graceful|help|configtest}"
exit 1
esac
exit $RETVAL
而后为此脚本赋予执行权限:
# chmod +x /etc/rc.d/init.d/httpd
service httpd restart
4.2加入服务列表:
接下来就可以启动服务进行测试了。
4.3此时apache命令无法直接执行,想让这个命令直接执行,要加到PATH路径中去
vim /etc/profile.d/httpd.sh
#必须要以.sh结尾,并且放在这里可以单独管理,不要的时候可以直接删除,添加如下内容
export PATH=$PATH:/usr/local/apache/bin
不会立即生效,可以再开一个窗口,这时就生效了
httpd -t #查看语法是否有误
httpd -l #查看模块
httpd -M #查看模块中是否有event模块
4.4现在可以更改模块为prefork
vim /etc/httpd/httpd.conf
ls /usr/local/apache/modules #查看是否有prefork模块文件
检验换模块是否成功
所以以后想使用什么模块,直接修改这个配置文件即可
二、安装mysql-5.5.28
1、首先下载平台对应的mysql版本至本地,这里是32位平台,因此,选择下载的软件包为:mysql-5.5.28-linux2.6-i686.tar.gz
1.1、安装并初始化mysql-5.5.28
1.2、建立初始化用户
1.3、准备数据存放的文件系统,一般来讲,我们的数据会随着企业规模的不同,可能会变得非常大,所以,一般把数据库文件放在独立的分区上,并且是独立的逻辑卷上,放在逻辑卷上,将来我们可以非常方便的扩展它的边界
新建一个逻辑卷,并将其挂载至特定目录即可。
1.3.1、新建分区:
fdisk /dev/sha
1.3.2、新建逻辑卷
1.3.3、这里假设其逻辑卷的挂载目录为/mydata,而后需要创建/mydata/data目录做为mysql数据的存放目录。
mke2fs –j /dev/myvg/mydata #格式化
mkdir /mydata #创建挂载点
vim /etc/fstab #开机自动挂载
/dev/myvg/mydata /mydata ext3 defaults 0 0
mount –a #挂载
mkdir /mydata/data 作为数据存放目录
1.3.4、修改数据的属主属组为mysql,为实施初始化做准备
# chown -R mysql:mysql /usr/local/mysql/*
1.3.5、修改/mydata/data的属主属组为mysql
1.3.6、开始初始化
[root@station45mysql]#scripts/mysql_install_db --user=mysql --datadir=/mydata/data
#以mysql用户的身份进行初始化
注意:初始化完成后要把mysql目录下文件的属主属组改为root,因为如果有人攻破mysql的话他就会获得所有的数据,这样是很不安全的,所有改为root用户
# chown -R root /usr/local/mysql/*
数据默认放在了data下,如果我们的数据没有改变存放路径,还放在了data下,这时它的属主是root是不可以的,因为没有写权限,应该改回mysql,但这里我们把数据放在了/mydata/data下,就不用改了
2、为mysql提供sysv服务脚本:安装mysql时给我们提供的有模板,我们改一下就可以用了。
[root@station45 mysql]#cp support-files/mysql.server /etc/init.d/mysqld
添加至服务列表:
[root@station45 mysql]# chkconfig --add mysqld
[root@station45 mysql]# chkconfig --list mysqld
[root@station45 mysql]#chkconfig mysqld on
3、为mysql提供主配置文件:配置文件格式,集中式配置文件,可以为多个程序提供配置
[root@station45 mysql]# cd /usr/local/mysql
[root@station45 mysql]# cp support-files/my-large.cnf /etc/my.cnf
–》复制配置文件模板(虚拟机的内存大小确定复制哪一个,这里我们的虚拟主机是512M的,需要复制一个larg.cnf即可
[root@station45 mysql]# vim /etc/my.cnf
而后就可以启动服务测试使用了。
4、修改PATH环境变量,让系统可以直接使用mysql的相关命令。
重新登录就可以使用了
[root@station45 ~]#
mysql
5、为了使用mysql的安装符合系统使用规范,并将其开发组件导出给系统使用,这里还需要进行如下步骤
输出mysql的man手册至man命令的查找路径:
[root@station45 ~]# vim /etc/man.config
6、输出mysql的库文件给系统库查找路径:
[root@station45 ~]# vim /etc/ld.so.conf.d/mysql.conf
添加数据的路径:
/usr/local/mysql/lib
注意修改配置文件后,不会立即生效,而是让系统重新载入系统库:
7、输出mysql的头文件至系统头文件路径/usr/include:这可以通过简单的创建链接实现:
到此我们的mysql的安装算是完成了,但如果我们还想让apache与mysql建立联系,就需要安装PHP,下面我们就开始php的安装
三、编译安装php-5.4.8
PHP有三种工作模式:cgi、module、fastcgi,其中对于apache而言最简单的是模块化模式,下面我们就把php安装为apache的模块
1、解决依赖关系:
请配置好yum源,在安装apache的时候已经配置过了,这里就不用再配置了。
[root@station45 ~]# rpm -ivh mhash-devel-0.9.2-6.el5.i386.rpm
在安装三个包:如下
2、编译安装php-5.4.8
下载源码包php-5.4.8.tar.bz2
root@station45 ~]# tar xf php-5.4.8.tar.bz2
[root@station45 ~]# cd php-5.4.8
[root@station45 ~]# vim /etc/httpd/httpd.conf
把prefork模块改为event模块
2.1、编译
编译好了:
编译选项讲解:
--prefix=/usr/local/php安装目录
--with-mysql=/usr/local/mysql mysql安装的位置
--with-openssl支持openssl功能
--with-mysqli=/usr/local/mysql/bin/mysql_config mysql另外一种能让php与mysql交互的接口
--enable-mbstring多字节string,用于支持中文的或非一个字节能表示字符的那些语言
--with-freetype-dir可移植的字体库,可以引用特定字体
--with-jpeg-dir支持jpg图片
--with-png-dir支持pnp图片
--with-zlib压缩库
--with-libxml-dir=/usr --enable-xml支持扩展标记语言
--enable-sockets支持套接字语言
--with-apxs2=/usr/local/apache/bin/apxs能够让php编译成apache模块(若想使用fastcgi,可以把这项换成--enable-fpm即可)
--with-mcrypt 支持加密功能(就是我们上面安装的libmcrypt-2.5.7-5.el5.i386.rpm
libmcrypt-devel-2.5.7-5.el5.i386.rpm 这两个包)
--with-config-file-path=/etc php配置文件存放的目录
--with-bz压缩库--enable-maintainer-zts 这一项用不用取决于你的apache类型,这里为了支持apache的worker或event这两个MPM,编译时使用了--enable-maintainer-zts选项,若使用的是prefork则不用编译这个选项
[root@station45 php-5.4.8]# make
[root@station45 php-5.4.8]# make intall
ls /usr/local/php/ 此目录下是php最基本的文件
ls /usr/local/php/bin #这些文件中php-config phpize 是php的命令行工具
ls /usr/local/php/etc #PHP子目录的配置文件
2.2、为php提供配置文件:
[root@station45 php-5.4.8]# cp php.ini-production /etc/php.ini
3、 编辑apache配置文件httpd.conf,让apache支持php
[root@station45~]#vim /etc/httpd/httpd.conf
定位至DirectoryIndex index.html
修改为:
而后重新启动httpd,或让其重新载入配置文件即可测试php是否已经可以正常使用。
现在可以访问了:172.16.50.100
4、php连接mysql是如何实现的呐?
同样也要编辑inde.php
现在再访问172.16.50.100,如果不确信,还可以先把mysqld关掉,在访问
[root@station45 htdocs]# service mysqld stop
[root@station45 htdocs]# service mysqld start
四、安装xcache,为php的opcode进行加速:
这里需要注意:能够与php5.4结合工作的只有xcache2.0及其以后的版本,而xcache可在谷歌上搜索下载
1、安装,这里使用2.0的版本已足够用了
[root@station45 xcache-2.0.0]# make
[root@station45 xcache-2.0.0]# make install
2、编辑php.ini,整合php和xcache
重启服务,使修改的内容生效
[root@station45 xcache-2.0.0]# service httpd restart
172.16.50.100 查看网页是否有XCache扩展
现在apache启动起来了
3、如何实现通过源码安装的httpd提供虚拟主机,首先要注释中心主机
vim /etc/httpd/http.conf
定位至DocumentRoot
#DocumentRoot "/usr/local/apache/htdocs" 这行注释掉
启用Virtual hosts
定位至Virtual hosts
Include /etc/httpd/extra/httpd-vhosts.conf 启用这一行,可以把虚拟主机单独配置在这里
vim /etc/httpd/extra/httpd-vhosts.conf #在虚拟主机那修改内容如下
创建所需目录及文档:
httpd -t 检查语法
service httpd restart 重启服务
访问
www.a.org
和
www.b.net
先在物理主机的hosts文档中添加如下两行,进行域名解析
172.16.50.100 www.a.org
172.16.50.100
www.b.net
解析成功
补充一个知识点:清除(浏览器)服务器缓存(在物理机的终端上执行)
ipconfig/flushdns
4、压力测试:在本机上做,使用我们刚才定义的两个虚拟主机
vim /etc/hosts 本地域名解析
172.16.50.100 www.a.org
172.16.50.100 www.b.net
4.1、开始测试
你还可以在请求多一点,当然我们这里的页面比较小,你也可以建一个大的网页,进行测试,看看效果会更明显
ab -c 100 -n 1000 http://www.a.org/index.html
ab -c 2000 -n 10000
http://www.a.org/index.html
ab -c 2000 -n 10000 http://www.a.org/index.html
netstat -an
:你会看到请求越多,你执行这个命令时,它会在那一直建立断开、建立断开、、、、、、
这些都是套接字文件,此前你发起的每一次请求,我们的服务器都要维持一个链接,这些都是还没有断开的,正在等待链接断开的请求
请求越多,当达到一定的数量时,超出你的cpu的承载能力时,就会卡那
ps aux | grep httpd
:你会发现出现的是进程,而不是线程,因为这是event模型,一个进程中有多个线程,而不是prefork模型
5、测试一下动态网站,下载phpMyAdmin-3.5.1-all-languages.tar.bz2
注意如果此时访问服务器是不能登录的,执行下面的命令,生成新密码
mysqladmin -uroot password ‘redhat’
mysqladmin -uroot -p flush-privileges 立即生效的命令
测试一下mysqladmin
登录成功
现在开始测试动态网站的压力测试,动态内容要比静态内容慢的多的多
再请求多一点,看能不能跑得动?(注意,这个命令本人已试过,我的电脑卡了将近一个小时,知道就可以了,卡死就不值啦)
6、如何能够让我们编译安装的apache实现SSL的功能
vim /etc/httpd/httpd.conf
启用ssl模块
LoadModule ssl_module module/mod_ssl.so
Include /etc/httpd/extra/httpd-ssl.conf
编辑ssl的配置文件
vim /etc/httpd/extra/httpd-ssl.conf
下面我们就来演示一下如何实现ssl的功能
1、准备工作:准备两台虚拟机
一台是CA签署服务器(IP地址是172.16.50.5),另一台是web服务器(IP地址是172.16.50.100),私有CA的实现包括:自身私钥的生成、生成自签证书、准备相关的文件
2、实现私有CA
2.1、为CA提供私钥
2.2、生成自签证书
2.3、修改证书的存放路径
[root@station41 CA]# vim /etc/pki/tls/openssl.cnf
2.4、手动创建CA所需的文件及目录
CA完成
3、web服务器(IP172.16.50.100)
3.1、安装ssl模块
[root@station45 ~]# yum install mod_ssl –y
3.2、生成自己的私钥
重启服务
3.3、指定自己的虚拟主机名
vim /etc/hosts 添加对应的主机名
172.16.50.100
www.a.org
3.4、生成证书签署请求
3.5、发送证书请求给CA
[root@station45 ssl]# scp httpd.csr 172.16.50.5:/tmp
3.6、CA签署发送过来的证书
3.7、CA把签署好的证书给web服务器(这里我们在web服务器端复制签署好的证书)
[root@station45 ssl]# scp 172.16.50.5:/tmp/httpd.crt /etc/httpd/conf/ssl/
3.8、证书签署后为了安全删除CA端的文件(为了安全起见)
[root@station41 tmp]# rm -rf httpd.csr httpd.crt
3.9、开启中心主机,更改web服务器的密钥与证书存放路径
[root@station45 html]# vim /etc/httpd/conf.d/ssl.conf
DocumentRoot "/var/www/html"
ServerName www.a.org:443
创建/var/www/html目录下的主页index.html,并且添加一些内容,方便后面的验证
把index.html的属主属组改为apache
[root@station45 html]# chown apache:apache index.html
一切都修改完成后检查一下语法错误并且重启一下httpd服务
httpd –t
service httpd restart
4、验证
把CA证书复制给物理主机一份,进行验证
把复制的cacert.pem重命名为cacert.crt
安装证书:
访问加密的web服务器—》
www.a.org
到此我们的LAMP就做好了,每一步我都亲自操作了,如果有出现错误的地方请提出来哦!
本文出自 “丽的博客” 博客,转载请与作者联系!