>>>>>LAMP详细学习记录文档

---------本文是小编在学习lamp的时候整理的笔记,,有一些小编遇到的问题,并把错误信息解决办法列出来。所以内容比较多--蓝色背景部分为屏幕的输出信息(包括错误信息)。希望有需要的新手朋友耐心阅读。特此声明-----本文仅供学习参考。
一、Apache
-->configure apache时出错:
[root@moshan httpd-2.4.12]#./configure --prefix=/application/apache2.4.12/ --enable-deflate --enable-expires --enable-headers --enable-modules=most --en    able-so --with-mrm=worker --enable-rewrite
-------------------------------------------------------------------
checking for APR... no
configure: error: APR not found .  Please read the documentation
-----------------------------------------------------------------
checking for APR-util... no
configure: error: APR-util not found.  Please read the documentation.
--------------------------------------------------------------------
checking for pcre-config... false
configure: error: pcre-config for libpcre not found. PCRE is required and available from http://pcre.org/
----------------------------------------------------------------------------
>>>>>出错原因:缺失APR APR-util pcre 这三个包
解决办法具体步骤如下:
-->解决apr not found问题
[root@moshan httpd]#wget http://archive.apache.org/dist/apr/apr-1.5.2.tar.gz
[root@moshan httpd]# tar -zxf apr-1.5.2.tar.gz  
[root@moshan httpd]# cd  apr-1.5.2  
[root@moshan apr-1.5.2]# ./configure --prefix=/usr/local/apr  
[root@moshan apr-1.5.2]# make && make install  
-->解决APR-util not found问题
[root@moshan httpd]#wget http://archive.apache.org/dist/apr/apr-util-1.5.4.tar.gz
[root@moshan httpd]# tar -zxf apr-util-1.5.4.tar.gz  
[root@moshan httpd]# cd apr-util-1.5.4  
[root@moshan apr-util-1.5.4]#./configure --prefix=/usr/local/apr-util -with-apr=/usr/local/apr/bin/apr-1-config  
[root@moshan apr-util-1.5.4]# make && make install
-->解决pcre问题
[root@moshan httpd]#wget http://jaist.dl.sourceforge.net/project/pcre/pcre/8.10/pcre-8.36.zip
[root@moshan httpd]#unzip -o pcre-8.36.zip  
[root@moshan httpd]#cd pcre-8.36  
[root@moshan pcre-8.36]#./configure --prefix=/usr/local/pcre  
[root@moshan pcre-8.36]#make && make install
>>>>>安装pcre的时候可能出现如下问题:
libtool: compile:  g++ -DHAVE_CONFIG_H -I. -c pcrecpp.cc  -o .libs/pcrecpp.o
./libtool: line 990: g++: command not found
make[1]: *** [pcrecpp.lo] Error 1
make[1]: Leaving directory `/root/Downloads/pcre-8.10'
make: *** [all] Error 2
>>>>>原因分析:没有安装gcc-c++组建
解决过程:使用如下命令安装即可
[root@moshan ~]# yum -y install gcc-c++
安装完毕后再重新configure,make && make install
>>>>>重新configure
用如下命令apache ---漫长的等待
[root@moshan httpd-2.4.12]#./configure --prefix=/application/apache2.4.12/ --enable-deflate --enable-expires --enable-headers --enable-modules=most --enable-so --with-mrm=worker --enable-rewrite --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util/  --with-pcre=/usr/local/pcre
>>>>>重新编译安装
[root@moshan httpd-2.4.12]make && make install        >>>>>又是漫长的等待
>>>>>至此安装工作就已经完成了----以下是一些常用命令
-->创建一个软链接--以方便维护人员使用管理,也方便后期升级工作
[root@moshan httpd-2.4.12]#ln -s /application/apache2.4.12 /application/apache
-->很重要的apache命令“/application/apache/bin/apachectl”
-->1.启动
[root@moshan httpd-2.4.12]#/application/apache/bin/apachectl start
-->第一次使用会有如下提示信息,可以忽略。
AH00558: httpd: Could not reliably determine the server's fully qualified
domain name, using 218.30.64.194. Set the 'ServerName' directive globally to
suppress this message
-->在浏览器地址栏输入http://localhost或者http://本地ip地址 查看浏览器是否能显示“It work!”,是则安装成功,否则失败。
-->失败排查工作
-->1.查看防火墙与selinux是否已经关闭
-->2.查看进程和端口号
-->3.查看apache的错误日志 /application/apache/apache/logs/error_log
-->make install时出错:
/bin/sh /usr/local/httpd-2.2.3/srclib/apr/libtool --mode=install /usr/bin/install -c -m 755 libaprutil-1.la /usr/local/apache2/lib libtool: install: error: cannot install `libaprutil-1.la' to a directory not ending in /usr/local/apache2/lib  www.2cto.com  
make[2]: *** [install] Error 1
猜测可能是以前安装用过./configure 来直接安装到/usr/local/apache2
导致安装文件已经不太“干净”
 解决方法:
 1、执行make clean后,重新编译安装。
>>>>>部署一个简单的个人web站点
-->我们可以先查看一下apache的默认站点目录
[root@moshan ~]# ll /application/apache/htdocs/
total 4
-rw-r--r-- 1 root root 45 Jun 12  2007 index.html
[root@moshan ~]#
[root@moshan ~]# cat /application/apache/htdocs/index.html
<html><body><h1>It works!</h1></body></html>
[root@moshan ~]#
-->我们可以发现在浏览器中测试apache是否安装成功的时候看到的内容就是这个index.html文件的内容
-->所以我们只需要把我们的站点程序放在/application/apache/htdocs/目录下即可。
-->访问我们的站点http://本地ip地址/*.html文件
-->修改完配置文件一定要对配置文件进行语法检测,否则重启apache时可能启动失败。
-->重启apache建议使用graceful参数进行重启
-->graceful参数比较优雅,使正在浏览的用户无感知
-->所以不会强行中断用户的访问请求,而是等待请求完毕后重启
[root@moshan bin]# ./apachectl -t
Syntax OK
[root@moshan bin]# ./apachectl graceful
[root@moshan bin]# ps -ef|grep httpd|grep -v grep
root      4666     1  0 10:03 ?        00:00:02          /application/apache2.4.12//bin/httpd -k start
daemon    5826  4666  0 17:31 ?        00:00:00   /application/apache2.4.12//bin/httpd -k start
daemon    5827  4666  0 17:31 ?        00:00:00   /application/apache2.4.12//bin/httpd -k start
daemon    5828  4666  0 17:31 ?        00:00:00   /application/apache2.4.12//bin/httpd -k start
[root@moshan bin]# netstat -lnt |grep 80
tcp        0      0 :::80                       :::*       LISTEN      
[root@moshan bin]#
>>>>>安装日志轮询工具(在虚拟主机配置)
[root@moshan software]# tar zxvf cronolog-1.6.2.tar.gz
[root@moshan cronolog-1.6.2]# ./configure && make && make install
-->查看是否安装成功
[root@moshan cronolog-1.6.2]# ll /usr/local/sbin/cronolog
-rwxr-xr-x 1 root root 33348 May 19 20:36 /usr/local/sbin/cronolog
>>>>>基于域名的虚拟主机--常用
-->1.修改httpd-vhosts.conf文件,加入如下内容
<VirtualHost *:80>
    ServerAdmin 907771586@qq.com  ;服务器管理员邮箱
    DocumentRoot "/var/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>
-->2.在主配置文件加授权(若不对虚拟主机进行目录授权则会出现403错误)
###############################--虚拟主机授权目录许可--################
<Directory "/var/blog">
    Options FollowSymLinks   ;不允许目录浏览
    AllowOverride None     ;
    Order allow,deny
    Allow from all
</Directory>
-->3.检查配置文件的语法
[root@moshan bin]# ./apachectl -t
Syntax OK
[root@moshan bin]# ./apachectl graceful
[root@moshan bin]# ps -ef|grep httpd|grep -v grep
root      4666     1  0 10:03 ?        00:00:02          /application/apache2.4.12//bin/httpd -k start
daemon    5826  4666  0 17:31 ?        00:00:00  /application/apache2.4.12//bin/httpd -k start
daemon    5827  4666  0 17:31 ?        00:00:00  /application/apache2.4.12//bin/httpd -k start
daemon    5828  4666  0 17:31 ?        00:00:00  /application/apache2.4.12//bin/httpd -k start
[root@moshan bin]# netstat -lnt |grep 80
tcp        0      0 :::80                       :::*               LISTEN
[root@moshan bin]#
-----------------------虚拟主机配置完成!------------------------------
--当检查语法出现如下提示的时候
--解决方法为将虚拟主机里面NameVirtualHost字段删除即可
AH00548: NameVirtualHost has no effect and will be removed in the next release
/application/apache2.4.12/conf/extra/httpd-vhosts.conf:1
Syntax OK
>>>>>Forbidden(禁止访问) 403错误------------------
-->1.apache配置文件没有站点目录的权限许可设置
-->解决办法:如上文所述在主配置文件加站点目录授权
-->检查语法-->重启
-->2.站点目录没有主页文件,且在配置文件又阻止了目录浏览
->解决方法:在站点目录加入主页文件即可
-->3.站点目录没有设置被web服务器访问的权限
-->4.……
>>>>>apache两种常用模式
-->1.worker:有多个子进程,每个子进程又会有多个线程,每个线程在某个确定的时候只能维持一个连接。编译的时候加入参数“--with-mpm=worker” --线程与进程的结合。
-->优点:资源占用比profork小,适合高并发高流量http服务。
-->缺点:如果一个线程崩溃,整个进程就会连同其任何线程一起挂掉,稳定性不如profork模式。
-->配置说明(配置文件:../conf/extra/httpd-mpm.conf)--需要注意的是要在主配置文件开启该配置文件。
 <IfModule mpm_prefork_module>  
 startServers          3      #开始建立子进程,此处表示启动apache的时候就建立至3个子进程,默认最大是16,需要加大可以显式声明serverlimit(最大20000)
 MinSpareTheads        50     #最小空闲线程数,此处表示空闲线程数小于5的时候,apache自动建立线程,如果服务器并发负载大的,建议加大该数
 MaxSpareTheads        200    #最大空闲线程数,此处表示空闲线程数大于10的时候,apache自动kill掉多余线程,如果服务器并发负载大的,建议加大该数
 ServerLimit           25    
 MaxClients            1600   #apache并发连接数,最大客户端连接数,可以同时处理的请求数。此处表示有1000个用户在访问,并不是每秒有1000个请求。即第1001个>
 用户就要等待之前的访问结束才能访问。
 TheadLimit            200
 TheadsPerChild           64     #每个进程包含固定的线程数,是影响最大的参数,最大缺省为64,在负载较大的情况下,64是不够的,这是就需要显式使用Theadlimt指令,最大缺省是20000
 MaxRequestsPerChild   5000   #每个子线程课处理的请求数。即子线程处理完“最大请求数”以后自动销毁该子线程。0表示无限制,就是说线程永不销毁
</IfModule>
-->常见计算
-->worker最大请求量 = 子进程总数*Theadsperhild >= Maxclients
-->MaxClients必须是TheadsPerChild的整数倍,否则apache会自动调节到相应的一个值。
-->2.profork:使用多个子进程,每个子进程只有一个进程,每个进程在某个确定的时候只能维持一个连接。编译的时候加入参数 “--with-mpm=profork”,apache默认模式--进程模式
-->优点:效率高,稳定,安全,对于线程调试困难的平台来说,调试更容易实现。
-->缺点:和worker相比较,消耗资源更多。
-->配置说明
<IfModule mpm_prefork_module>
startServers          10       #开始建立子进程,此处表示启动apache的时候就建立至10个子进程
MinSpareServers       10       #最小空闲进程数,此处表示空闲进程数小于5的时候,apache自动建立进程,如果服务器并发负载大的,建议加大该数
MaxSpareServers       15       #最大空闲进程数,此处表示空闲进程数大于10的时候,apache自动kill掉多余进程,如果服务器并发负载大的,建议加大该数
ServerLimit           2000     #同worker
MaxClients          1000     #apache并发连接数,最大客户端连接数,可以同时处理的请求数。此处表示有1000个用户在访问,并不是每秒有1000个请求。即第1001个用户就要等待之前的访问结束才能访问。
MaxRequestsPerChild   5000     #每个子进程课处理的请求数。即子进程处理完“最大请求数”以后自动销毁该子进程。0表示无限制,就是说进程永不销毁
</IfModule>
-->查看本地安装的是哪个模式
[root@moshan bin]#./apachectl -M|grep -E "worker|profork"
mpm_worker_module (static)
[root@moshan bin]#./apachectl -l|grep -E "worker|profork"
worker.c
[root@moshan bin]#
-->查看apache当前的进程数
--1.进程模式
[root@moshan ~]# ps -ef|grep httpd
root      1837     1  0 07:45 ?        00:00:00 /application/apache2.4.12//bin/httpd -k start
daemon    1849  1837  0 07:45 ?        00:00:00 /application/apache2.4.12//bin/httpd -k start
daemon    1850  1837  0 07:45 ?        00:00:00 /application/apache2.4.12//bin/httpd -k start
daemon    1851  1837  0 07:45 ?        00:00:00 /application/apache2.4.12//bin/httpd -k start
daemon    8046  1837  0 09:09 ?        00:00:00 /application/apache2.4.12//bin/httpd -k start
root      8175  7710  0 09:39 pts/1    00:00:00 grep httpd
[root@moshan ~]# ps -ef|grep httpd|wc -l
6
[root@moshan ~]#
--2.线程模式
[root@moshan ~]# pstree -a|grep httpd|grep -v grep |wc -l
109
[root@moshan ~]#
>>>>>生产环境常见的http状态码列表分析
200        #正常
301
403        #拒绝访问
500
502
503
504
[root@moshan ~]# curl -I www.baidu.com
HTTP/1.1 200 OK
Date: Wed, 20 May 2015 01:46:46 GMT
Server: Apache
Cache-Control: max-age=86400
Expires: Thu, 21 May 2015 01:46:46 GMT
Last-Modified: Tue, 12 Jan 2010 13:48:00 GMT
ETag: "51-4b4c7d90"
Accept-Ranges: bytes
Content-Length: 81
Connection: Keep-Alive
Content-Type: text/html
---状态分析----
--TIME_WAIT 1     --内核调优参数,修改linux内核参数---c/s建立TCP/IP连接完毕,关闭socket后,处理完请求正在等待关闭的状态。
--CLOSE_WAIT 1    --远端已经关闭,等待sockt关闭。
--FIN_WAIT 1      --连接已经关闭,socket正在等待远端结束。
--ESTABLISHED 1   --一个服务的并发连接数,正在建立的连接,处于连接状态的状态--重要
--FIN_WAIT 1       
--SYN_RECV 1      --已经从网络收到一个连接请求
--CLOSING 1      --socket已经关闭,但是我们仍旧没有发送数据。
--LAST_ACK 1      --远端已经结束,socket已经关闭,等待acknowl-edgement。
-->解决time_wait过高
--1.减少状态的等待时间(超时时间)。
--2.time_wait重用,即重新处理请求。
--3.系统回收
-->解决操作--内核参数--/etc/sysctl.conf
net.ipv4.tcp_fin_timeout=2
#-->表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2的状态时间--超时时间
net.ipv4.tcp_tw_reuse=1
#-->表示开启重用,允许重新用于TCP连接,默认为0,表示关闭
net.ipv4.tcp_tw_recycle=1
#-->表示开启TCP连接中TIME_WAIT的sockets的快速回收,默认为0,表示关闭。
net.ipv4.tcp_syncookies=1
#-->表示开启SYN-Coolies,当出现SYN等待队列溢出时,启用cookies来处理,可以防范少量SYN***,默认为0,表示关闭。
net.ipv4.tcp_keepalive_time=1200
#-->表示当keepalive启用的时候,TCP发送keepalive消息频度。默认是2h,现在改为20分钟。
net.ipv4.ip_local_port_range=4000       65000
#-->表示用于向外连接的端口范围。默认情况下很小:32768到61000,改为1024到65535
net.ipv4.tcp_max_syn_backlog=16384
#-->表示SYN队列长度,默认长度1024,加大队列长度为16384,可以容纳更多等待连接的网络连接数。
net.ipv4.tcp_max_tw_buckets=30000
#-->表示系统同时保持TIMEWAIT套接字的最大数量,如果超过这个数字,TIMEWAIT套接字将立刻被清楚并打印警告信息。默认为180000,对于apache、nginx等服务器可以调低一点(5000--30000),看业务而定。如lvs、squid可以大一点
>>>>>基于ip的虚拟主机--少用
-->1.增加一个ip(别名ip)--ifconfig eth0:89 down删除
[root@moshan ~]# ifconfig eth0:89 192.168.24.89 netmask 255.255.255.0 up
[root@moshan ~]# ifconfig eth0:89
eth0:89   Link encap:Ethernet  HWaddr 00:16:D4:20:C0:C0  
      inet addr:192.168.24.89  Bcast:192.168.24.255  Mask:255.255.255.0
      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
      Interrupt:22 Base address:0xe800
[root@moshan ~]#
-->检查是否可用(使用其他主机ping新添加的ip)
[root@bogon ~]# ifconfig eth0|grep "inet addr"
          inet addr:192.168.24.77  Bcast:192.168.24.255  Mask:255.255.255.0
[root@bogon ~]# ping 192.168.24.89
PING 192.168.24.89 (192.168.24.89) 56(84) bytes of data.
64 bytes from 192.168.24.89: icmp_seq=1 ttl=64 time=0.153 ms
64 bytes from 192.168.24.89: icmp_seq=2 ttl=64 time=0.176 ms
2 packets transmitted, 2 received, 0% packet loss, time 1726ms
rtt min/avg/max/mdev = 0.153/0.164/0.176/0.017 ms
[root@bogon ~]#
-->2.建立虚拟主机--可以与基于域名的虚拟主机配置文件进行比较
<VirtualHost 192.168.24.89:80>
    ServerAdmin 907771586@qq.com
    DocumentRoot "/application/apache/htdocs/moshan"
    ServerName 192.168.24.89
    ServerAlias moshan.com
    ErrorLog "logs/blog/blog_error_log"
    # CustomLog "logs/blog/blog-access_log" common
    CustomLog "|/usr/local/sbin/cronolog/app/logs/access_www_%Y%m%d.log" combined
</VirtualHost>
-->3.测试--直接在浏览器输入对应的ip地址
>>>>>基于端口的虚拟主机--不常用--局域网使用--域名和端口/ip和端口混合
-->1.增加端口在主配置文件添加
[root@moshan ~]# vim /application/apache/conf/httpd.conf
Listen 80

Listen 8080

Listen 8090
-->修改虚拟主机的配置文件(ip/域名)
<VirtualHost 192.168.24.89:8080>
    ServerAdmin 907771586@qq.com
    DocumentRoot "/application/apache/htdocs/moshan"
    ServerName 192.168.24.89
    ServerAlias moshan.com
    ErrorLog "logs/blog/blog_error_log"
    CustomLog "|/usr/local/sbin/cronolog/app/logs/access_www_%Y%m%d.log"combined
</VirtualHost>
<VirtualHost *:8080>
    ServerAdmin 907771586@qq.com
    DocumentRoot "/application/apache/htdocs/moshan"
    ServerName 192.168.24.89
    ServerAlias moshan.com
    ErrorLog "logs/blog/blog_error_log"
    CustomLog "|/usr/local/sbin/cronolog/app/logs/access_www_%Y%m%d.log"combined
</VirtualHost>
-->3.测试。在浏览器直接输入192.168.24.89:8080

>>>>>mod_deflate压缩模块----apache调优选项
-->1.安装该模块---检查是否安装该模块--dso方式编译
[root@moshan modules]# ll mod_deflate.so
-rwxr-xr-x 1 root root 70954 May 19 09:52 mod_deflate.so
[root@moshan modules]#
[root@moshan modules]# grep mod_deflate.so /application/apache/conf/httpd.conf
#LoadModule deflate_module modules/mod_deflate.so   --安装完毕以后在主配置文件会多出这一行,启用mod_deflate模块时在主配置文件里取消该行的注释。
--若没有安装可以使用如下方式安装
[root@moshan metadata]# pwd
/root/Downloads/apach/httpd-2.4.12/modules/metadata   --切换到apache解压的目录
[root@moshan metadata]# ls -l |grep ".c$"                --查找需要安装的模块是否存在
-rw-r--r-- 1 501 games 11688 Apr 15  2013 mod_cern_meta.c
-rw-r--r-- 1 501 games  5405 Dec 12  2012 mod_env.c
-rw-r--r-- 1 501 games 18396 May  7  2014 mod_expires.c
-rw-r--r-- 1 501 games 32800 Jun  3  2014 mod_headers.c
-rw-r--r-- 1 501 games 11012 Dec 14  2011 mod_ident.c
-rw-r--r-- 1 501 games 73995 Nov 16  2013 mod_mime_magic.c
-rw-r--r-- 1 501 games 15400 Feb 17  2014 mod_remoteip.c
-rw-r--r-- 1 501 games 22673 Apr 26  2013 mod_setenvif.c
-rw-r--r-- 1 501 games 16170 Dec  5  2011 mod_unique_id.c
-rw-r--r-- 1 501 games 15371 Jun 17  2014 mod_usertrack.c
-rw-r--r-- 1 501 games  8640 Oct 24  2010 mod_version.c
[root@moshan ~]# /application/apache/bin/apxs -a -i -a /root/Downloads/apach/httpd-2.4.12/modules/metadata/mod_flate.c  --使用apxs工具编译安装
--c 编译操作
--i 安装操作
--a 自动增加一行LoadModule到httpd.conf文件中。
-->2.启用该模块
--在虚拟主机文件中添加如下代码--在httpd-vhosts.conf文件的<VirtualHost*:8080></VirtualHost>中添加
<ifmodule mod_deflate.c>
    DeflateCompressionLevel 9              #压缩等级,数值越大效率越高
    SetOutputFilter DEFLATE               #启用压缩
    AddOutputFilterByType DEFLATE text/html text/plain text/xml    #以下三行为设置压缩类型
    AddOutputFilterByType DEFLATE application/javascript
    AddOutputFilterByType DEFLATE text/css
</ifmodule>
--某公司使用的配置
<ifmodule mod_deflate.c>
    DeflateCompressionLevel 9
    SetOutputFilter DEFLATE
    AddOutputFilterNote Input instream
    AddOutputFilterNote Output outstream
    AddOutputFilterNote Ratio ratio
</ifmodule>
-->3.通过firefox浏览器进行测试--yslow工具或者直接通过curl -I命令测试,比较前后的头
>>>>>mod_expires模快--调优选项
--优点:
--1.提升用户体验
--2.节约网站带宽
--3.服务器压力减小,节约维护成本
--介绍:允许数据在用户的浏览器端进行缓存,当第一次访问某个apache服务器的时候,就会将数据加载到浏览器的缓存,在缓存的有效期之内,客户端再请求同样的内容的时候,就不需要再到服务器进行下载,直接读取本地的缓存,mod_expires模块就是设置缓存有效期的功能。
-->dso方式编译检查是否安装该模块
[root@moshan modules]# grep mod_expires.so /application/apache/conf/httpd.conf
#LoadModule expires_module modules/mod_expires.so
[root@moshan modules]#
-->该模块的常规安装方式参考上文的mod_deflate模块
-->1.模块在httpd.conf中的应用
--将以下内容完整的拷贝到httpd.conf文件结尾保存,所有的虚拟主机都会生效。--全局生效
ExpiresActive on
ExpiresDefault "access plus 12 months"
ExpiresByType text/html "access plus 12 months"       #缓存时间设置为12个月,具体可以根据自己的业务需求设定。
ExpiresByType text/css "access plus 12 months"
ExpiresByType p_w_picpath/gif "access plus 12 months"
ExpiresByType p_w_picpath/jpeg "access plus 12 months"
ExpiresByType p_w_picpath/jpg "access plus 12 months"
ExpiresByType p_w_picpath/png "access plus 12 months"
ExpiresByType application/x-shockwave-flash "access plus 12 months"
ExpiresByType application/x-javescript "access plus 12 months"
ExpiresByType video/x-flv "access plus 12 months"
-->2.模块在httpd-vhosts.conf中的应用
--将以下内容完整的拷贝到httpd-vhosts.conf文件结尾保存  --局部生效
ExpiresActive on
ExpiresDefault "access plus 12 months"
ExpiresByType text/html "access plus 12 months"
ExpiresByType text/css "access plus 12 months"
ExpiresByType p_w_picpath/gif "access plus 12 months"
ExpiresByType p_w_picpath/jpeg "access plus 12 months"
ExpiresByType p_w_picpath/jpg "access plus 12 months"
ExpiresByType p_w_picpath/png "access plus 12 months"
ExpiresByType application/x-shockwave-flash "access plus 12 months"
ExpiresByType application/x-javescript "access plus 12 months"
ExpiresByType video/x-flv "access plus 12 months"
-->expires失效条件
--1.用户主动清空缓存。
--2.缓存时间到期。
>>>>>apache优化
--1.配置cronolog进行日志轮询。
--2.错误页面优雅显示。--重定向到其他页面--httpd.conf Errorocument 404 http://www.baidu.com
--3.mod_deflate文件压缩功能。
--4.mod_expires缓存功能。
--5.更改apache的默认用户。(不被别人猜到)
--6.使用worker模式,提升并发数。
--7.屏蔽apache版本等敏感信息。--修改httpd-default.conf文件Serverignature off Serverokens Prod
--8.apache目录权限设置。(root目录权限755,文件644)
--9.开启httpd-mpm.conf增加连接数。
--10.apache防盗链功能。-----网站元素不允许嵌套到别的网站
--11.禁止目录索引。(特别是没有主页文件的情况)
--12.禁止用户重载。
--13.关闭CGI。
--14.避免使用。htaccess文件。(分布式配置文件)
--15.apache安全模块。
----mod_evasive20     防DDOS
----nod_limitipconn   针对单站点
----mod_security2     防止SQL注入
----make jail         自动建立jail所需要的程序放到jail内的软件
--16.正确途径取得源代码,多大apache补丁。
--17.apache日志授予root 700权限。
--18.系统内核优化。
--19.禁止PHP解析指定站点的目录。
--20.使用tmpfs文件系统代替频繁访问的目录。
--21.尽可能减少HTTP请求数。
--22.使用CDN做网站加速。---存放静态资源(网宿、快网、蓝讯……)
--23.apache程序架构优化。程序页面服务器、图片附件服务器、上传服务器,三者尽量分离(独立服务器)
二、MYSQL

http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.16.tar.gz

--1.建立Mysql帐号
[root@moshan ~]# groupadd mysql
[root@moshan ~]# useradd -s /sbin/nologin -g mysql -M mysql
[root@moshan ~]# tail -n 1 /etc/group
mysql:x:501:
[root@moshan ~]# tail -n 1 /etc/passwd
mysql:x:501:501::/home/mysql:/sbin/nologin
[root@moshan ~]#
--2.configure
[root@moshan mysql-5.1.62]#./configure --prefix=/usr/local/mysql --with-unix-socket-path=/usr/local/mysql/tmp/mysql.sock --localstatedir=/usr/local/mysql/data --enable-assembler --enable-thread-safe-client --with-mysqld-user=mysql --with-big-tables --with-pthread --enable-assembler --with-extra-charsets=complex --with-readline --with-ssl --with-embedded-server --enable-local-infile --with-plugin=partition,innobase --with-plugin-PLUGIN --with-mysqld-ldflags=-all-static --with-client-ldflags=-all-static
可能出现的错误
--with-unix-socket-path=/usr/local/mysql/tmp/mysql.sock
configure: error: No curses/termcap library found
原因:缺少ncurses安装包
解决:[root@moshan mysql-5.1.62]# yum install ncurses-devel -y
》》参数说明----详细请看./configure --help
--prefix=/usr/local/mysql                                           指定安装路径默认为/usr/local
--with-unix-socket-path=/usr/local/mysql/tmp/mysql.sock             指定mysql.sock文件存放路径
--localstatedir=/usr/local/mysql/data                               指定数据文件存放位置
--enable-assembler                             允许使用汇编模式--性能优化选项
--enable-thread-safe-client                         使用线程方式编译客户端                           
--with-mysqld-user=mysql                         指定mysql运行的系统账户
--with-big-tables
--with-pthread                              强制使用pthread线程序库编译
--enable-assembler
--with-extra-charsets=complex
--with-readline
--with-ssl
--with-embedded-server
--enable-local-infile
--with-plugin=partition,innobase
--with-plugin-PLUGIN
--with-mysqld-ldflags=-all-static                      服务器使用静态哭--性能优化选项
--with-client-ldflags=-all-static                         客户端使用静态哭--性能优化选项
-->重新configure----------------漫长的等待
[root@moshan mysql-5.1.62]#./configure --prefix=/usr/local/mysql --with-unix-socket-path=/usr/local/mysql/tmp/mysql.sock --localstatedir=/usr/local/mysql/data --enable-assembler --enable-thread-safe-client --with-mysqld-user=mysql --with-big-tables --with-pthread --enable-assembler --with-extra-charsets=complex --with-readline --with-ssl --with-embedded-server --enable-local-infile --with-plugin=partition,innobase --with-plugin-PLUGIN --with-mysqld-ldflags=-all-static --with-client-ldflags=-all-static
--3.编译
[root@moshan mysql-5.1.62]#make && make install   ---------------漫漫漫长的等待
--4.编译安装完成。
-->mysql的默认配置文件 /etc/my.cnf   以下为mysql提供的配置文件模板
[root@moshan mysql-5.1.62]# ll support-files/*.cnf
-rw-r--r-- 1 root root  4714 May 21 20:41 support-files/my-huge.cnf
-rw-r--r-- 1 root root 19763 May 21 20:41 support-files/my-innodb-heavy-4G.cnf  建议认真阅读一遍,进行注释
-rw-r--r-- 1 root root  4688 May 21 20:41 support-files/my-large.cnf
-rw-r--r-- 1 root root  4699 May 21 20:41 support-files/my-medium.cnf
-rw-r--r-- 1 root root  2467 May 21 20:41 support-files/my-small.cnf
[root@moshan mysql-5.1.62]# cp support-files/my-small.cnf /etc/my.cnf   根据个人业务需求选择合适的模板
--5.创建数据库文件(configure指定的参数路径),并授权
[root@moshan mysql-5.1.62]#make -p /usr/local/mysql/data
[root@moshan mysql-5.1.62]#chown -R mysql /usr/local/mysql
--6.安装mysql数据库文件
[root@moshan mysql-5.1.62]#/usr/local/msyql/bin/mysql_install_db --user=mysql
--安装可能遇到的错误
ERROR: 1004  Can't create file '/tmp/#sql23e7_1_0.frm' (errno: 13)
按照如下方式解决:重新给/tmp目录授权777即可解决
[root@moshan mysql-5.1.62]# chmod 777 /tmp/
--7启动mysql--多种方式
----1.[root@moshan mysql-5.1.62]# /usr/local/mysql/bin/mysqld_safe &
      [root@moshan mysql-5.1.62]# netstat -lnt|grep 3306
      tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      
      [root@moshan mysql-5.1.62]#
----2.[root@moshan bin]# cp/root/Downloads/mysql-5.1.62/support-files/mysql.server ./  到源码目录复制启动脚本到安装路径下的/bin目录
      [root@moshan bin]# chmod 700 mysql.server                                        授权700
      [root@moshan bin]# ./mysql.server
      [root@moshan bin]# ./mysql.server start                        启动
      Starting MySQL SUCCESS!
      [root@moshan bin]#
      [root@moshan bin]# netstat -lnt|grep 3306
      tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      
      [root@moshan bin]# ps -ef|grep mysqld |grep -v grep
      root      9368  7529  0 21:12 pts/2    00:00:00 /bin/sh  /usr/local/mysql/bin/mysqld_safe
      [root@moshan bin]#
      [root@moshan bin]# mysql -uroot -pzzmoshan    登录遇到如下错误的话可以按下问进行解决
    ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password:NO)
    ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password:YES)
--我就是遇到了上面的问题,后来百度看了很多的博文,按照博友的方法,但都没有解决。
--博友们的方法基本都是围绕着mysqladmin和update来解决的并没有考录到root用户不存在的可能。
--解决办法(视情况而定)
--上面的问题的原因,我个人认为是因为root密码丢失或者root用户不存在造成的
--所以可以对mysql数据库的user表进行查询看看root是否存在。但是不管是哪种原因,
--解决问题的前期的准备工作都是一样的,即要进入mysql数据库,可以按如下方式进入。

--开始解决

[root@moshan bin]# ./mysql.server stop                      先关闭mysql的服务

[root@moshan bin]# mysqld_safe --user=mysql --skip-grant-tables --skip-networking &   然后加入这几个选项进行启动mysql服务  
[1] 8324
[root@moshan bin]# 150522 19:50:00 mysqld_safe Logging to
'/usr/local/mysql/data/moshan.err'.
150522 19:50:00 mysqld_safe Starting mysqld daemon with databases from
/usr/local/mysql/data
[root@moshan bin]# mysql -u root mysql      -------------------------------------- 直接回车就能进入mysql数据库                                        
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.1.62 Source distribution
Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> use mysql;
Database changed
mysql> select user from mysql.user ;         发现是空的--由此猜测不存在root用户
Empty set (0.00 sec)
mysql> insert into user set user='root',ssl_cipher='',x509_issuer='',x509_subject='';  所以使用insert语句插入root用户,并授权即解决了问题
Query OK, 1 row affected (0.00 sec)
mysql> update user set Host='localhost',select_priv='y',insert_priv='y',update_priv='y',Alter_priv='y',delete_priv='y',create_priv='y',drop_priv='y',reload_priv='y',shutdown_priv='y',Process_priv='y',file_priv='y',grant_priv='y',References_priv='y',index_priv='y',create_user_priv='y',show_db_priv='y',super_priv='y',create_tmp_table_priv='y',Lock_tables_priv='y',execute_priv='y',repl_slave_priv='y',repl_client_priv='y',create_view_priv='y',show_view_priv='y',create_routine_priv='y',alter_routine_priv='y',create_user_priv='y' where user='root';    为新增加的root用户授予系统权
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0
mysql> quit                              -----------------------------------退出
Bye
[root@moshan bin]# mysql -u root        ----------------------------------使用root登录
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.1.62 Source distribution
Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> update mysql.user set password=password('zzmoshan') where user='root';----------------------------为root添加密码
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0
mysql> flush privileges;                                                     ----------------------使设置生效(也可以重启mysql服务)
Query OK, 0 rows affected (0.00 sec)
mysql> quit                          ---------------------------------退出
Bye
[root@moshan bin]# ps                ------------查找mysql_safe进程id
PID TTY          TIME CMD
4637 pts/0    00:00:00 bash
5112 pts/0    00:00:00 mysqld_safe        
5744 pts/0    00:00:00 ps
[root@moshan bin]# kill 5112        --------------将其kill掉
[root@moshan bin]# mysql.server start  -------------重启mysql服务
Starting MySQL SUCCESS!
[root@moshan bin]# mysql -uroot -pzzmoshan   -------------- 正常进入mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.1.62 Source distribution
Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights
reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input
statement.
mysql> select user();
+----------------+
| user()         |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.00 sec)
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| moshan             |
| mysql              |
| test               |
+--------------------+
4 rows in set (0.00 sec)
mysql>
------问题解决-----大功告成-

-->配置/etc/init.dmysqld start方式启动
[root@moshan support-files]# find / -name mysql.server   ---找到mysql的启动脚本mysql.server
/root/Downloads/mysql-5.1.62/support-files/mysql.server
[root@moshan bin]# cp /root/Downloads/mysql-5.1.62/support-files/mysql.server /etc/init.d/mysqld    添加到/etc/init.d下并改名为mysqld  
[root@moshan bin]# /etc/init.d/mysqld stop
Shutting down MySQL. SUCCESS!
[root@moshan bin]# /etc/init.d/mysqld start
Starting MySQL. SUCCESS!
[root@moshan bin]#
三、PHP
-->PHP的安装要依赖于apache和mysql和一些lib库,所以要先检查安装apache、mysql环境和lib库是否已经安装。
--1.检查apache和mysql环境
[root@moshan bin]# netstat -lnt | egrep "3306|80"
tcp        0      0 0.0.0.0:3306                0.0.0.0:*              LISTEN      
tcp        0      0 :::8080                     :::*                   LISTEN      
tcp        0      0 :::80                       :::*                   LISTEN      
[root@moshan bin]# ------------以下两步操作是检查mysql和apache的版本的--可以省略
[root@moshan bin]# ./apachectl -v
Server version: Apache/2.4.12 (Unix)
Server built:   May 19 2015 09:45:40    --搭建于2015--5--19
[root@moshan bin]# mysql -uroot -pzzmoshan -e "select version();"
+-----------+
| version() |
+-----------+
| 5.1.62    |
+-----------+
[root@moshan bin]#
[root@moshan bin]# wget 127.0.0.1
--2015-05-23 09:07:45--  http://127.0.0.1/
Connecting to 127.0.0.1:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 4948 (4.8K) [text/html]
Saving to: “index.html”
100%[===================================================================================================================>]
4,948       --.-K/s   in 0s      
2015-05-23 09:07:45 (99.4 MB/s) - “index.html” saved [4948/4948]
[root@moshan bin]#--------------------以上表明apache能正常访问。由于mysql在查找版本的时候是调用内部的vertion函数,所以也已经表明能正常访问。
--2.检查lib库
[root@moshan ~]# rpm -qa zlib-devel libxm12-devel libjpeg-devel freetype-devel libpng-devel
freetype-devel-2.3.11-15.el6_6.1.i686
zlib-devel-1.2.3-29.el6.i686
libxm12-devel-2.7.6-17.el6_6.1.i686
libjpeg-turbo-devel-1.2.1-3.el6_5.i686
libpng-devel-1.2.49-1.el6_2.i686
[root@moshan ~]#   缺少lib包的朋友可以自行通过yum安装或者源码安装。
--安装libiconv包(自行选择版本)  http://ftp.gnu.org/pub/gnu/libiconv
[root@moshan libiconv-1.14]# tar zxf libiconv-1.14.tar.gz
[root@moshan libiconv-1.14]# cd libiconv-1.14
[root@moshan libiconv-1.14]# ./configure --prefix=/usr/local/libiconv
[root@moshan libiconv-1.14]# make && make install
-->由此可见,我的机器环境搭建完成。下面可以进行PHP的安装了。

http://cn.php.net/get/php-5.5.25.tar.gz/from/a/mirror

[root@moshan Downloads]# tar zxf php-5.5.25.tar.gz
[root@moshan Downloads]# cd php-5.5.25
[root@moshan Downloads]# ./configure \
--prefix=/application/php-5.5.25 \         #指定路径
--with-apxs2=/application/apache/bin/apxs \#类似dso加载 dso编译方式
--with-mysql=/usr/local/mysql \            #依赖mysql
--with-xmlrpc \
--with-openssl \
--with-zlib \
--with-freetype-dir \
--with-gd \
--with-jpeg-dir \
--with-png-dir \
--with-iconv=/usr/local/libiconv \
--enable-short-tags \
--enable-sockets \
--enable-zend-multibyte \
--enable-soap \
--enable-mbstring \
--enable-static \
--enable-gd-native-ttf \
--with-curl \
--with-xsl \
--enable-ftp \
--with-libxml-dir
--注:--enable-sigchild --enable-pcntl --enable-bcmath 这几个选项适合nagios的php监控
------configure报下面这个错误--表示没有libxsl-devel包,通过yun安装即可
configure: error: xslt-config not found. Please reinstall the libxslt >= 1.1.0
distribution
------然后重新configure即可
Thank you for using PHP.   configure完成
[root@moshan php-5.5.25]# make && make install     --------编译安装------------需要很长时间---看到如下内容表示安装成功
Wrote PEAR system config file at: /application/php-5.5.25/etc/pear.conf
You may want to add: /application/php-5.5.25/lib/php to your php.ini
include_path
/root/Downloads/php-5.5.25/build/shtool install -c ext/phar/phar.phar
/application/php-5.5.25/bin
ln -s -f /application/php-5.5.25/bin/phar.phar
/application/php-5.5.25/bin/phar
Installing PDO headers:          /application/php-5.5.25/include/php/ext/pdo/
---配置php
[root@moshan php-5.5.25]# ln -s /application/php-5.5.25 /application/php
---查看php的配置文件
[root@moshan php-5.5.25]# ll php.ini-*
-rw-r--r-- 1 1000 1000 69236 May 14 08:02 php.ini-development----------------开发版
-rw-r--r-- 1 1000 1000 69266 May 14 08:02 php.ini-production-----------------产品版 --生产环境用的
[root@moshan php-5.5.25]# ------两者的区别可以通过diff工具进行比较
---配置apache支持php
--1.修改apache的主配置文件(做好备份)
[root@moshan php-5.5.25]# cp php.ini-production /application/php/lib/php.ini   -----默认配置文件
[root@moshan conf]# vim httpd.conf
----1.先将ServerName 127.0.0.1:80的注释去掉,即要使这句生效
----2.在下面1、2两行的后面加入3、4行内容
1.AddType application/x-compress .Z
2.AddType application/x-gzip .gz .tgz
3.AddType application/x-httpd-php .php .php3
4.AddType application/x-httpd-php-source .phps
5.AddType application/x-httpd-php .php .phpml
----3.将系统默认daemon用户改为普通用户moshan(根据自己的情况修改)
User moshan
Group moshan
----4.添加php的主页文件
<IfModule dir_module>
    DirectoryIndex  index.php index.html
</IfModule>
----5.检查语法并重启
[root@moshan apache]# ./bin/apachectl -t
Syntax OK
[root@moshan apache]# ./bin/apachectl graceful
[root@moshan apache]#
[root@moshan apache]# netstat -lnt|grep 80
tcp        0      0 :::8080                     :::*                  LISTEN      
tcp        0      0 :::80                       :::*                  LISTEN      
[root@moshan apache]# ps -ef|grep httpd|grep -v start
root     18573 28278  0 11:21 pts/0    00:00:00 grep httpd
[root@moshan apache]
----编写php主页文件并授可执行权限
[root@moshan htdocs]# cat index.php
<?php
phpinfo();
?>
[root@moshan htdocs]# ll index.php
-rwxr-xr-x 1 root root 20 May 23 11:28 index.php
[root@moshan htdocs]#
---测试--在浏览器输入本机ip即可
=======需要注意的一点--要将虚拟主机配置在httpd.conf中注释掉
--测试连接mysql是否成功
编辑index.php文件,加入如下内容。
<?php
    $link=mysql_connect("localhost","root","zzmoshan");
    if(!$link) echo "FAILD!";
    else echo "OK!";
?>
---网页出现OK!的则表示连接成功。
---------------------------------------------------------------------------------
-->搭建个人博客站点
--1.下载博客程序https://cn.wordpress.org/wordpress-4.2.2-zh_CN.zip
--2.解压缩至站点目录,并授权目录相应的权限
[root@moshan apache]# chown -R root.root htdocs/
[root@moshan apache]# chown -R moshan.moshan ./htdocs/wp-content/
--3.建立wordpress数据库及帐号
[root@moshan ~]# mysql -uroot -pzzmoshan
mysql> create database wordpress default character set gbk collate
gbk_chinese_ci;
Query OK, 1 row affected (0.08 sec)
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| moshan             |
| mysql              |
| test               |
| wordpress          |
+--------------------+
5 rows in set (0.09 sec)
mysql> grant select,insert,delete,update,create on wordpress.* to
wordpress@localhost identified by 'zzmoshan';
Query OK, 0 rows affected (0.09 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.04 sec)
mysql> select user,host from mysql.user;
+-----------+-----------+
| user      | host      |
+-----------+-----------+
| root      | localhost |
| wordpress | localhost |
+-----------+-----------+
2 rows in set (0.00 sec)
mysql>
mysql> grant select,insert,delete,update on wordpress.* to
wordpress@192.168.24.* identified by 'zzmoshan';
--4.创建wp-config.php文件  访问后面的地址按照提示创建即可--http://blog.moshan.com