LAMP环境源码安装详细步骤
(CentOS6、Apache2.2、Mysql5.1、PHP5.2)
注: 本文由工具直接word转换为md, 没有做代码高亮等格式化处理, 观感较差.
一、准备工作
⑴安装相关程序库
yum install -y ntp libxml2 libxml2-devel openssl openssl-devel curl curl-devel
libmcrypt flex bison libmcrypt-devel zlib libpng libpng-devel libjpeg
libjpeg-devel libtiff-devel jpeg8 bzip2-devel freetype autoconf automake gd gcc
gcc-c++ gcc-g77 ncurses-devel libjpeg libjpeg-devel freetype-devel pam-devel
kerne
⑵设置系统
同步好时间,使用crontab来定时的同步时间
vim /etc/crontab或crontab -e 然后加入以下行(每30分钟同步一次):
*/30 * * * * ntpdate 0.asia.pool.ntp.org
防火墙放行
iptables -L 列出目前防火墙设置
iptables -F 清空防火墙规则
删除etc/sysconfig/下iptables和iptables.old文件
vi /etc/selinux/config
SELINUX=disabled 关闭系统安全策略(永久,重启生效)
getenforce 获取目前状态
setenforce 0 临时改(无需重启)
3.为防止出现乱码
i18n是internationalization的缩写,意思指i和n之间有18个字母。/etc/sysconfig/i18n里面存放着系统的区域语言设置,可以使linux系统支持国际化信息显示。
如果客户系统是繁体中文,也是如此操作。
vi /etc/sysconfig/i18n
注释以下句
#LANG=”en_US.UTF-8”
#SYSFONT=”latarcyrheb-sun16”
添加以下句
LANG=”zh_CN.GB18030”
LANGUAGE=”zh_CN.GB18030:zh_CN.GB2312:zh_CN”
SUPPORTED=”zh_CN.UTF-8:zh_CN:zh:en_US.UTF-8:en_US:en”
SYSFONT=”lat0-sun16”
编辑系统环境
vi /etc/profile
添加export LC_ALL=zh_CN.GB18030
保存退出,重新载入。
source /etc/profile
二.安装MySQL
⑴下载并安装mysql
添加mysql用户,添加用户组mysql ,将mysql用户默认组设置为mysql用户组:
groupadd mysql
useradd -s /sbin/nologin -g mysql -M mysql
先下载,后解压mysql,放在/home/soft目录下
cd /home/soft/mysql-5.1.61
编译mysql参数:
./configure –prefix=/usr/local/mysql –localstatedir=/home/db_mysql/data
–sysconfdir=/etc –with-charset=utf8 –with-extra-charsets=all
–enable-thread-safe-client –with-big-tables –with-ssl –with-embedded-server
–enable-local-infile –enable-assembler –with-plugins=innobase
–with-plugins=partition –with-plugins=myisammrg
–with-unix-socket-path=/usr/local/mysql/mysql.sock –with-low-memory
–with-readline
make
make install
若编译失败make clean后再make和make install
默认不支持innodb存储引擎,其中添加–with-plugins=all可以把innodb加载进来。
⑵配置mysql
生成MySQL配置文件
cp /usr/local/mysql/share/mysql/my-medium.cnf /etc/my.cnf
vi /etc/my.cnf #修改mysql配置文件
把该文件改为或加上以下行
1.[client]
default-character-set = utf8
2.[mysqld]
character-set-server = utf8
collation-server = utf8_general_ci
注释掉(加#号)#skip-locking这一行(跳过外部锁定)
2.更改数据库拥有者,让mysql用户有所有权限
mkdir -p /home/db_mysql/data
chown -R mysql:mysql /home/db_mysql/data
chown -R mysql:mysql /usr/local/mysql
初始化数据库(创建授权表):
/usr/local/mysql/bin/mysql_install_db –user=mysql –datadir=/home/db_mysql/data
–basedir=/usr/local/mysql
把启动脚本加入系统服务项:
cp /usr/local/mysql/share/mysql/mysql.server /etc/init.d/mysqld
chown root:root /etc/init.d/mysqld
chmod 755 /etc/init.d/mysqld
修改启动脚本
vim /etc/init.d/mysqld
需要修改的地方有datadir=/home/db_mysql/data(前面初始化数据库时定义的目录)
设定开机启动
chkconfig –level 35 mysqld on
(levels 35 表示在命令行模式和X Window模式下自动启动)
启动mysql命令:service mysqld start
3.设密码:
创建符号链接ln -s /usr/local/mysql/bin/mysqladmin /usr/bin/
设置密码命令mysqladmin -u root password ‘a123456’
上句为给mysql用户root加密码a123456
4.登录:
创建符号链接ln -s /usr/local/mysql/bin/mysql /usr/bin/
登录命令mysql -u root -p
然后输密码。
5.退出:\q或exit
三.安装apache
⑴下载并安装apache
安装GCC等组件(如果系统没有安装)
如果安装apache提示“no acceptable C compiler found in
\$PATH”,这是因为系统中没有安装gcc
yum install -y gcc gcc-c++
①下载apache,下载地址为:http://mirror.esocc.com/apache//httpd/httpd-2.2.31.tar.gz
②tar zxvf httpd-2.2.31.tar.gz
③cd httpd-2.2.31
④编译
./configure –prefix=/usr/local/httpd –enable-so –enable-mods-shared=most
–with-mpm=worker –with-included-apr –enable-expires=shared
–enable-deflate=shared –enable-rewrite=shared –enable-static-support
–disable-userdir
⑤make && make install
⑥apache安装完成后,进入/usr/local/httpd/bin/目录下,执行./apachectl
start命令启动apache
⑦centos本机访问http://127.0.0.1/页面查看apache服务是否安装正常。
⑵设置apache开机启动
cp /usr/local/httpd/bin/apachectl /etc/init.d/httpd
vim /etc/init.d/httpd
编辑,在头部之下,添加一行,找到:
#!/bin/sh
#
此处添加以下行,保存退出。
# chkconfig: 2345 85 15
chkconfig –add httpd //添加开机启动
chkconfig httpd on
chkconfig //检查是否开启
四.apache结合php
⑴编辑apache的主配置文件
vim /usr/local/httpd/conf/httpd.conf
找到:
AddType application/x-gzip .gz .tgz
在该行下面添加:
AddType application/x-httpd-php .php
AddType application/x-httpd-php .php3
AddType application/x-httpd-php .php4
找到:
\
DirectoryIndex index.html
\</IfModule>
将该行改为
\
DirectoryIndex index.html index.htm index.php
\</IfModule>
以下行修改路径及控制目录和文件的访问授权:如下设为允许所有
\<Directory “/usr/local/httpd/htdocs”>
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
\</Directory>
找到
#ServerName www.example.com:80
在该行下面添加
ServerName localhost:80
找到:
#Include conf/extra/httpd-mpm.conf
#Include conf/extra/httpd-info.conf
#Include conf/extra/httpd-vhosts.conf
#Include conf/extra/httpd-default.conf
去掉前面的“#”号,取消注释。
注:以上 4
个扩展配置文件中的设置请按照相关原则进行合理配置!修改完成后保存退出。
⑵配置Apache的扩展配置文件
配置apache的进程管理、默认设置以及虚拟主机
①.配置Apache进程管理
查看当前httpd的工作模式,可执行 /usr/local/httpd/bin/apachectl -l
进程管理模式共有三种:worker模式、prefork模式、Event模式
配置文件为:/usr/local/httpd/conf/extra/httpd-mpm.conf
将配置文件中下面一段修改为如下,worker工作模式例子与详解:
\
StartServers 2 //启动apache时,首次启动2个进程
MaxClients 150 //最多支持150个并发的http链接
MinSpareThreads 25 //最少有25个线程空闲,否则新增加进程或者线程了
MaxSpareThreads 75 //最多有75个线程空闲,否则就要自动回收多余空闲的线程或者进程
ThreadsPerChild 25 //启动一个进程时,此进程首先启动25个线程
MaxRequestsPerChild 1000
//允许每个进程在它的生命周期内处理的http最大请求1000.。0为没有限制。(不建议设为0,可能内存溢出)
\</IfModule>
以下是例子配置
\
ServerLimit 50 //最多可以启动50个进程
ThreadLimit 1000 //每个进程最多可以启动1000个线程
StartServers 8
MaxClients 5000
MinSpareThreads 750
MaxSpareThreads 2500
ThreadsPerChild 1000
MaxRequestsPerChild 20000
\</IfModule>
指令说明(根据每台机的配置,设置对应的参数):
StartServers:设置服务器启动时建立的子进程数量。因为子进程数量动态的取决于负载的轻重,所有一般没有必要调整这个参数。
MaxClients:允许同时伺服的最大接入请求数量(最大线程数量)。任何超过MaxClients限制的请求都将进入等候队列。默认值是400,16(ServerLimit)乘以25(ThreadsPerChild)的结果。因此要增加MaxClients的时候,你必须同时增加ServerLimit的值。
ThreadsPerChild:每个子进程建立的常驻的执行线程数。默认值是25。子进程在启动时建立这些线程后就不再建立新的线程了。
MinSpareThreads:最小空闲线程数,默认值是75。这个MPM将基于整个服务器监视空闲线程数。如果服务器中总的空闲线程数太少,子进程将产生新的空闲线程。
MaxSpareThreads:设置最大空闲线程数。默认值是250。这个MPM将基于整个服务器监视空闲线程数。如果服务器中总的空
闲线程数太多,子进程将杀死多余的空闲线程。MaxSpareThreads的取值范围是有限制的。Apache将按照如下限制自动修正你设置的
值:worker要求其大于等于MinSpareThreads加上ThreadsPerChild的和。
MaxRequestsPerChild:设置每个子进程在其生存期内允许伺服的最大请求数量。到达MaxRequestsPerChild的限制后,子进程将会结束。如果MaxRequestsPerChild为0,子进程将永远不会结束。将MaxRequestsPerChild设置成非零值有两个好处:
1.可以防止(偶然的)内存泄漏无限进行,从而耗尽内存。
2.给进程一个有限寿命,从而有助于当服务器负载减轻的时候减少活动进程的数量。
注意对于KeepAlive链接,只有第一个请求会被计数。事实上,它改变了每个子进程限制最大链接数量的行为。
先计算每一个httpd请求大概占用多少内存,除去系统和其他程序占用的内存后,估计每秒请求数有多少,就可以计算出来了
②.配置Apache虚拟主机
配置文件为:/usr/local/httpd/conf/extra/httpd-vhosts.conf
将配置文件中下面一段修改为相应虚拟主机域名和相应目录,下例为改为www.test.org:
\
ServerAdmin webmaster\@dummy-host2.localhost
DocumentRoot “/home/www/test/“
ServerName www.test.org
\<Directory “/home/www/test/“>
Options FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
\</Directory>
\</VirtualHost>
新建目录(改为上述的虚拟主机目录)
mkdir -p /home/www/test/
重启apache服务service httpd restart
如果想要在centos本机测试,用虚拟主机域名方式浏览,请编辑vi /etc/hosts文件加上:
127.0.0.1 www.test.org
③配置Apache服务器默认设置
vi /usr/local/httpd/conf/extra/httpd-default.conf
# 联机超过 60 秒失败就重试
Timeout 60
# 开启 KeepAlive
KeepAlive Off
# 设定同一时间可容许的 KeppAlive 量
MaxKeepAliveRequests 5000
# KeepAlive 多久要自动 Timeout 掉
KeepAliveTimeout 3
# 关掉那费时的 DNS 查寻
HostnameLookups Off
总结一下:
在内存非常充足的服务器上,不管是否关闭 KeepAlive
功能,服务器性能不会有明显变化;
如果服务器内存较少,或者服务器有非常大量的文件系统访问时,或者主要处理动态网页服务,关闭
KeepAlive
后可以节省很多内存,而节省出来的内存用于文件系统Cache,可以提高文件系统访问的性能,并且系统会更加稳定。
补充:
关于是否应该关闭 KeepAlive
选项,我觉得可以基于下面的一个公式来判断。 在理想的网络连接状况下,系统的
Apache 进程数和内存使用可以用如下公式表达:
HttpdProcessNumber = KeepAliveTimeout * TotalRequestPerSecond /
Average(KeepAliveRequests)
HttpdUsedMemory = HttpdProcessNumber * MemoryPerHttpdProcess
换成中文:
总Apache进程数 = KeepAliveTimeout * 每秒种HTTP请求数 / 平均KeepAlive请求
Apache占用内存 = 总Apache进程数 * 平均每进程占用内存数 需要特别说明的是:
[平均KeepAlive请求] 数,是指每个用户连接上服务器后,持续发出的 HTTP
请求数。当 KeepAliveTimeout 等 0 或者 KeepAlive 关闭时,KeepAliveTimeout
不参与乘的运算从上面的公式看,如果 [每秒用户请求] 多,[KeepAliveTimeout]
的值大,[平均KeepAlive请求] 的值小,都会造成 [Apache进程数] 多和 [内存]
多,但是当 [平均KeepAlive请求] 的值越大时,[Apache进程数] 和 [内存]
都是趋向于减少的。
基于上面的公式,我们就可以推算出当 平均KeepAlive请求 \<= KeepAliveTimeout
时,关闭 KeepAlive 选项是划算的,否则就可以考虑打开。
Timeout:设置服务器在断定请求失败前等待的秒数。默认值300。
KeepAlive:设置是否启用HTTP持久链接,On 代表打开,Off
代表关闭。如果用于同一页面包含大量静态文件的应用,设置为On,以提高性能;如果用于主要为动态页面的应用,
设置为Off,以节约内存资源;如果服务器前跑有squid或者其它七层设备,设置为On。
MaxKeepAliveRequests:限制当启用KeepAlive时,每个连接允许的请求数量。如果将此值设为”0”,将不限制请求的数目。笔者建议将此值设为100-500之间的一个值,以确保最优
的服务器性能。
KeepAliveTimeout:设置持久链接中服务器在两次请求之间等待的秒数。对于高负荷服务器来说,KeepAliveTimeout值较大会导致一些性能方面的问题:超时值越大,与空闲客户
端保持连接的进程就越多。
UseCanonicalName:配置服务器如何确定它自己的域名,可选值为On | Off |
DNS。DNS用于为大量基于IP的虚拟主机支持那些古董级的不提供”Host:”头的浏览器使用。笔者建议
设置为Off。
AccessFileName:设置分布式配置文件的名字,默认为.htaccess。如果为某个目录启用了分布式配置文件功能,那么在向客户端返回其中的文档时,服务器将在这个文档所在的各
级目录中查找此配置文件,因此会带来性能问题,笔者建议关闭分布式配置文件功能。
ServerTokens:控制服务器回应给客户端的”Server:”应答头是否包含关于服务器操作系统类型和编译进的模块描述信息,同时还控制着
ServerSignature指令的显示内容。可选值
为Full | OS | Minor | Minimal | Major |
Prod。笔者建议设置为显示最少信息的Prod。
ServerSignature:配置服务器生成页面的页脚,可选值为On | Off |
EMail。采用On会简单的增加一行关于服务器版本和正在伺服的虚拟主机的ServerName,而EMail设置会额外
创建一个指向 ServerAdmin的”mailto:”部分。建议使用默认值Off。
HostnameLookups:设置是否启用对客户端IP的DNS查找,可选值为On | Off |
Double。DNS查询会造成明显的时间消耗,建议设置为Off。
⑶安装配置apache模块
注:apache的LoadModule是按顺序加载的,mod_cband(限速)要在mod_proxy(代理)之前。下面部分模块在编译安装apache时就已安装了。
①、配置支持中文URL路径
起作用的模块为mod_encoding
1、先打补丁
yum install patch -y
# wget http://webdav.todo.gr.jp/download/mod_encoding-20021209.tar.gz
# wget
http://webdav.todo.gr.jp/download/experimental/mod_encoding.c.apache2.20040616
新版本mod_encoding.c 覆盖
# cp mod_encoding.c.apache2.20040616 mod_encoding-20021209/mod_encoding.c
这里必须要打一个apache 2.2的补丁。否则make也会出apxs rc=65536 之类的错误。
# wget
http://www.aconus.com/\~oyaji/faq/mod_encoding.c-apache2.2-20060520.patch
# cd mod_encoding-20021209
# patch -p0 \< mod_encoding.c-apache2.2-20060520.patch
2、安装iconv-hook库
# cd mod_encoding-20021209/lib
# ./configure –prefix=/usr
# make
# make install
# ldconfig
3、生成 mod_encoding的so文件
./configure –with-apxs=/usr/local/httpd/bin/apxs –with-iconv-hook=/usr/include
make
gcc -shared -o mod_encoding.so mod_encoding.o -Wc,-Wall -Llib -liconv_hook
cp mod_encoding.so /usr/local/httpd/modules
4、编辑 apache 2.2 配置
vi /usr/local/httpd/conf/httpd.conf
加入以下行
LoadModule encoding_module modules/mod_encoding.so
\
EncodingEngine on
NormalizeUsername on
SetServerEncoding GBK
DefaultClientEncoding UTF-8 GBK GB2312
AddClientEncoding “(Microsoft .* DAV \$)” UTF-8 GBK GB2312
AddClientEncoding “Microsoft .* DAV” UTF-8 GBK GB2312
AddClientEncoding “Microsoft-WebDAV*“ UTF-8 GBK GB2312
\</IfModule>
②、配置防DDOS攻击模块
下载mod_evasive
http://www.nuclearelephant.com/projects/mod_evasive
#tar zxvf mod_evasive_1.10.1.tar.gz
#cd mod_evasive
#/usr/local/httpd/bin/apxs -i -a -c mod_evasive20.c
打开 httpd.conf文件,查看是否有以下行,如没有则加上去
LoadModule evasive20_module modules/mod_evasive20.so
并加入
\
DOSHashTableSize 3097
DOSPageCount 2
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 10
\</IfModule>
③、配置限制带宽
模块名为mod-cband
#tar xzvf mod-cband-0.9.6.1.tgz
#cd mod-cband-0.9.6.1
./configure –with-apxs=/usr/local/httpd/bin/apxs //指定一下
apxs的路径,否则可能会出错
#make
#make install
安装成功后提示:
chmod 755 /usr/local/httpd/modules/mod_cband.so
打开/usr/local/httpd/conf/httpd.conf
LoadModule cband_module modules/mod_cband.so已经添加。
安装模块到此完毕,以下是配置
然后在虚拟主机配置文件中,按以下方法修改:
\
ServerName www.example.com
ServerAdmin webmaster\@example.com
DocumentRoot /home/www/html/example_com
CBandLimit 100M //限制虚拟主机总访问带宽为100Mb。
CBandSpeed 1024 10 30
//CBandSpeed限定总的最大链接速度为1024kb,最多并发处理10个请求每秒和30个链接每秒
CBandRemoteSpeed 20kb/s 5 3 //
CBandRemoteSpeed限定一个用户最多能有20kb的链接速度,最多并发5个请求每秒和3个链接每秒
CBandPeriod 4W //设定多久对所记录的全局访问带宽进行重设(清零)。4W=4 weeks
4周(一个月)
\<Location /cband-status>
SetHandler cband-status
\</Location>
#
开启了mod_cband的实时监测功能,可以通过http://server_name/cband-status进行直观的观测。(全局监测)
\<Location /cband-status-me>
SetHandler cband-status-me
\</Location>
#
开启了mod_cband的实时监测功能,可以通过http://server_name/cband-status-me进行直观的观测。(单一监测)
\</VirtualHost>
④、mod_proxy代理服务
apache提供了mod_proxy模块用于提供代理服务,能够支持的包括正向代理、反向代理、透明代理、缓存、负载均衡,HTTP代理、FTP代理、SSL代理等若干强大的功能。
通常我们使用的比较多的,是正向代理。也就是在浏览器的网络连接属性框中,填写上一个代理服务器的ip和端口,即可通过代理服务器中转,去浏览网页。
如果apache没有安装proxy模块,可以不用重新编译,就能添加模块。
cd /home/soft/httpd-2.2.31/modules/proxy
/usr/local/httpd/bin/apxs -c -i mod_proxy.c proxy_util.c (ps
必须2个c一起编译,不然会报错) /usr/local/httpd/bin/apxs -c -i mod_proxy_http.c
proxy_util.c
vi /usr/local/httpd/conf/httpd.conf
添加以下行
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
这里只要求安装模块,如果没有设置代理的要求,先不用配置。
配置正向代理:
首先在apache上启用mod_proxy模块,需要注意的是,如果在apache-2.2上,则还需要加载名为mod_proxy_http的模块。因为2.2系列把代理功能都拆分成N个小模块了。打开apache的conf(虚拟主机方式或全局配置),加入如下几行:(全局配置)
ProxyRequests On
ProxyVia On
\
Order deny,allow
Deny from all
Allow from internal.example.com
\</Proxy>
保存退出,重启apache服务:service httpd restart
现在即可在浏览器的网络连接属性框中,填写上your_apache_server_ip的ip地址,端口是80,开始用代理了。
使用apache提供的代理,也可以加身份验证,或者设置ACL来限制客户端来源等。这些配置就和普通的apache站点配置一样。
注:使用正向代理时严格控制访问权限(使用ProxyRequests指令)是非常重要的。否则你的代理会被客户端利用来访问其它服务器并且隐藏客户端的真实身份。这不仅对您的网络有威胁,对整个因特网来说也同样如此。当使用反向代理(在”ProxyRequests
Off”条件下使用ProxyPass指令)的时候访问控制要相对宽松,因为客户端只能连接你配置的特定主机。
配置反向代理:
如从某地访问google太慢,但是机房服务器上很快,则可在服务器上设置反向代理连接到google,也就是把google映射到服务器上来访问。然后新建一个网站,即创建一个标准的配置段。这里我们将站点/google目录设置为google的反向代理。在这段里边,加入下边一内容:
ProxyRequests Off
\
Order deny,allow
Allow from all
\</Proxy>
ProxyPass /google http://www.google.com/
//前面可以直接访问(80)后面代理的(82)
ProxyPassReverse /google http://www.google.com/
保存退出,重启apache。ProxyPass与ProxyPassReverse的内容总是一样,ProxyPassReverse是重定向~~~~
现在即可使用浏览器来访问我的网站的/google目录。当打开这个目录的时候,会发现页面是google。点击google的下级页面,都可以正常的打开访问,而此时浏览器中的代理服务器并未设置任何内容——这就是反向代理。
⑤、反向加速/代理加速模块
模块名为mod_extract_forwarded
tar zxvf mod_extract_forwarded2-0.1.tar.gz
cd extract_forwarded
/usr/local/httpd/bin/apxs -c -i -a mod_extract_forwarded2.c
这个全自动安装,会在apache的httpd.conf自动添加
LoadModule extract_forwarded_module modules/mod_extract_forwarded2.c
默认这时还不工作,还需要配置 (其中 127.0.0.1 为代理加速配置)
MEForder refuse,accept
MEFrefuse all
MEFaccept 127.0.0.1
#MEFaddenv on
#default on
#MEFdebug on
#default off
以下为测试
MEFdebug 设为 on 的话
cd /var/log/httpd/
tail error_log
可以看到很多具体信息
MEF: phase:post read request, initial substituted 1.1.1.1 for 127.0.0.1,
http://2.2.2.2/file.html
MEF: phase:URI translate, already done, NFA required, http://2.2.2.2/file.html
MEF: phase:access check, already done, NFA required, http://2.2.2.2/file.html
MEF: phase:cleanup initial, undo spoof substituted 127.0.0.1 for 1.1.1.1
1.1.1.1 为远端客户机
2.2.2.2 为服务器 用ip连接 当然域名也可以
如果不通过代理加速直接连的话
MEF: phase:post read request, no FORWARDED-FOR header, /favicon.ico
MEF: phase:URI translate, no FORWARDED-FOR header, /favicon.ico
MEF: phase:access check, no FORWARDED-FOR header, /favicon.ico
⑥、启用mod_expires模块
mod_expires可以减少10%左右的重复请求,让重复的用户对指定的页面请求结果都CACHE在本地,根本不向服务器发出请求。
在使用之前,首先要确认一下”mod_expires”模组是否有启用。编辑Apache的”httpd.conf”配置文件。搜索找到这行,取消注释:
#LoadModule expires_module modules/mod_expires.so
⑦、安装设置浏览器缓存模块
mod_headers模块:该模块用来设置浏览器缓存文件,如果安装apache时没有安装mod_headers模块,使用以下apache安装加载
1、进入httpd源码包下的目录modules/metadata。
cd /home/soft/httpd-2.2.20/modules/metadata
2、执行安装命令。
/usr/local/httpd/bin/apxs -i -a -c mod_headers.c
如果要启用在httpd.conf 中设置:
LoadModule headers_module modules/mod_headers.so
\
Header add MS-Author-Via “DAV”
\</IfModule>
上述所有模块安装配置完毕后重启apache
五.安装php
⑴.安装php的依赖包文件
如果没安装,会报错:configure: error: mcrypt.h not found. Please reinstall
libmcrypt
源码编译安装,去http://www.sourceforge.net下载Libmcrypt,mhash,mcrypt安装包
libmcrypt(libmcrypt-2.5.8.tar.gz ):
mcrypt(mcrypt-2.6.8.tar.gz ):
mhash(mhash-0.9.9.9.tar.gz ):
①.先安装Libmcrypt
tar -zxvf libmcrypt-2.5.8.tar.gz
cd libmcrypt-2.5.8
./configure
make
make install 说明:libmcript默认安装在/usr/local
②.再安装mhash
tar -zxvf mhash-0.9.9.9.tar.gz
cd mhash-0.9.9.9
./configure
make
make install
③.最后安装mcrypt
tar -zxvf mcrypt-2.6.8.tar.gz
cd mcrypt-2.6.8
./configure
make
make install
可能还是提示错误,以下解决方法,先
ln -s /usr/local/bin/libmcrypt-config /usr/bin/libmcrypt-config
再编译mcrypt
如果错误,可能还是变量的问题,解决方法如下:运行
export LD_LIBRARY_PATH=/usr/local/lib: LD_LIBRARY_PATH
然后make && make install
完成
⑵.正式安装php
①.下载php并解压:
tar zxf php-5.2.13.tar.gz
cd php-5.2.13
配置编译参数:
./configure –prefix=/usr/local/php –with-apxs2=/usr/local/httpd/bin/apxs
–with-gd –with-config-file-path=/usr/local/php/etc/
–with-mysql=/usr/local/mysql –with-mysqli=/usr/local/mysql/bin/mysql_config
–with-iconv-dir=/usr/local –with-freetype-dir –with-jpeg-dir –with-png-dir
–with-zlib –with-libxml-dir –enable-xml –disable-rpath –enable-discard-path
–enable-dafe-mode –enable-bcmath –enable-shmop –enable-sysvsem
–enable-inline-optimization –with-curl –with-curlwrappers –enable-mbregex
–enable-mbstring –with-mcrypt –with-gld –enable-gd-native-ttf –with-openssl
–with-mhash –enable-pcntl –enable-sockets –enable-zip –enable-soap
–enable-inline-optimization
make
make test (可跳过这一句)
make install
②编译中可能的报错信息:
configure:error:libjpeg.(a|so) not found
Configure: error: libpng.(also) not found
方法一:更改Linux的系统共享库搜索路径配置文件vi /etc/ld.so.conf
加入以下行
/usr/lib64
/usr/lib
/usr/local/lib
/usr/local/lib64
/lib64
/lib
修改了ld.so.conf后要重新运行一下ldconfig
方法二:创建符号链接:
ln -s /usr/lib64/libjpeg.so /usr/lib/
ln -s /usr/lib64/libpng.so /usr/lib/
方法三:手动复制文件(不推荐)
因为是64位系统,可能系统找不到库文件,所以只能手动复制个
\cp -frp /usr/lib64/libjpeg.* /usr/lib/
这样就可以把error:libjpeg.(a|so) not found解决
Configure: error: libpng.(also) not found.的解决办法:
\cp -frp /usr/lib64/libpng* /usr/lib/
好了,这样就不会出错了.
③初始化配置文件
复制源码包里php.ini文件到/usr/local/php/etc/目录
cp /home/soft/php-5.2.13/php.ini-dist /usr/local/php/etc/php.ini
创建符号链接,令任何目录都可以使用php -v命令
ln -s /usr/local/php/bin/* /usr/bin/
保存退出,php安装完成。
六.PHP模块的安装及最后配置
⑴php性能优化,安装ZendOptimizer
该模块只适用于PHP
tar zxvf ZendOptimizer-3.3.3-linux-glibc23-x86_64.tar.gz
cd ZendOptimizer-3.3.3-linux-glibc23-x86_64
./install
根据提示,输入Zend安装路径/usr/local/Zend(默认)
php.ini文件目录/usr/local/php/etc/
apache的apachectl文件目录/usr/local/httpd/bin/apachectl
然后重启apache,退出zend安装程序。
XXX查看确认L.A.M.P环境信息、提升 PHP 安全性
在网站根目录放置 phpinfo.php 脚本,检查phpinfo中的各项信息是否正确。
phpinfo.php文件添加以下几行
\<?php
phpinfo();
?>
确认 PHP 能够正常工作后,在 php.ini 中进行设置提升 PHP
安全性(禁用相关不使用的功能)。
vi /usr/local/php/etc/php.ini
找到:
disable_functions =
设置为如下(注:要用到的功能不要添加到下面):
phpinfo,passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restore,dl,pfsockopen,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server