>>>>>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... noconfigure: error: APR not found . Please read the documentation-----------------------------------------------------------------checking for APR-util... noconfigure: error: APR-util not found. Please read the documentation.--------------------------------------------------------------------checking for pcre-config... falseconfigure: 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 foundmake[1]: *** [pcrecpp.lo] Error 1make[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 qualifieddomain name, using 218.30.64.194. Set the 'ServerName' directive globally tosuppress 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 -tSyntax OK[root@moshan bin]# ./apachectl graceful[root@moshan bin]# ps -ef|grep httpd|grep -v greproot 4666 1 0 10:03 ? 00:00:02 /application/apache2.4.12//bin/httpd -k startdaemon 5826 4666 0 17:31 ? 00:00:00 /application/apache2.4.12//bin/httpd -k startdaemon 5827 4666 0 17:31 ? 00:00:00 /application/apache2.4.12//bin/httpd -k startdaemon 5828 4666 0 17:31 ? 00:00:00 /application/apache2.4.12//bin/httpd -k start[root@moshan bin]# netstat -lnt |grep 80tcp 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 -tSyntax OK[root@moshan bin]# ./apachectl graceful[root@moshan bin]# ps -ef|grep httpd|grep -v greproot 4666 1 0 10:03 ? 00:00:02 /application/apache2.4.12//bin/httpd -k startdaemon 5826 4666 0 17:31 ? 00:00:00 /application/apache2.4.12//bin/httpd -k startdaemon 5827 4666 0 17:31 ? 00:00:00 /application/apache2.4.12//bin/httpd -k startdaemon 5828 4666 0 17:31 ? 00:00:00 /application/apache2.4.12//bin/httpd -k start[root@moshan bin]# netstat -lnt |grep 80tcp 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:1Syntax 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 #同workerMaxClients 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 httpdroot 1837 1 0 07:45 ? 00:00:00 /application/apache2.4.12//bin/httpd -k startdaemon 1849 1837 0 07:45 ? 00:00:00 /application/apache2.4.12//bin/httpd -k startdaemon 1850 1837 0 07:45 ? 00:00:00 /application/apache2.4.12//bin/httpd -k startdaemon 1851 1837 0 07:45 ? 00:00:00 /application/apache2.4.12//bin/httpd -k startdaemon 8046 1837 0 09:09 ? 00:00:00 /application/apache2.4.12//bin/httpd -k startroot 8175 7710 0 09:39 pts/1 00:00:00 grep httpd[root@moshan ~]# ps -ef|grep httpd|wc -l6[root@moshan ~]#--2.线程模式[root@moshan ~]# pstree -a|grep httpd|grep -v grep |wc -l109[root@moshan ~]# >>>>>生产环境常见的http状态码列表分析200 #正常301403 #拒绝访问500502503504[root@moshan ~]# curl -I www.baidu.comHTTP/1.1 200 OKDate: Wed, 20 May 2015 01:46:46 GMTServer: ApacheCache-Control: max-age=86400Expires: Thu, 21 May 2015 01:46:46 GMTLast-Modified: Tue, 12 Jan 2010 13:48:00 GMTETag: "51-4b4c7d90"Accept-Ranges: bytesContent-Length: 81Connection: Keep-AliveContent-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.confnet.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到65535net.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:89eth0: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.89PING 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 ms64 bytes from 192.168.24.89: icmp_seq=2 ttl=64 time=0.176 ms2 packets transmitted, 2 received, 0% packet loss, time 1726msrtt 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.confListen 80Listen 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 onExpiresDefault "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 onExpiresDefault "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程序架构优化。程序页面服务器、图片附件服务器、上传服务器,三者尽量分离(独立服务器)二、MYSQLhttp://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/groupmysql:x:501:[root@moshan ~]# tail -n 1 /etc/passwdmysql: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.sockconfigure: 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 1Server version: 5.1.62 Source distributionCopyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> use mysql;Database changedmysql> 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: 0mysql> quit -----------------------------------退出Bye[root@moshan bin]# mysql -u root ----------------------------------使用root登录Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 2Server version: 5.1.62 Source distributionCopyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.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: 0mysql> flush privileges; ----------------------使设置生效(也可以重启mysql服务)Query OK, 0 rows affected (0.00 sec)mysql> quit ---------------------------------退出 Bye[root@moshan bin]# ps ------------查找mysql_safe进程idPID TTY TIME CMD4637 pts/0 00:00:00 bash5112 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 -------------- 正常进入mysqlWelcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 3Server version: 5.1.62 Source distributionCopyright (c) 2000, 2011, Oracle and/or its affiliates. All rightsreserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type 'help;' or '\h' for help. Type '\c' to clear the current inputstatement.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 stopShutting down MySQL. SUCCESS! [root@moshan bin]# /etc/init.d/mysqld startStarting 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 -vServer 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 OKLength: 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-develfreetype-devel-2.3.11-15.el6_6.1.i686zlib-devel-1.2.3-29.el6.i686libxm12-devel-2.7.6-17.el6_6.1.i686libjpeg-turbo-devel-1.2.1-3.el6_5.i686libpng-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.0distribution------然后重新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.confYou may want to add: /application/php-5.5.25/lib/php to your php.iniinclude_path/root/Downloads/php-5.5.25/build/shtool install -c ext/phar/phar.phar/application/php-5.5.25/binln -s -f /application/php-5.5.25/bin/phar.phar/application/php-5.5.25/bin/pharInstalling 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 .Z2.AddType application/x-gzip .gz .tgz3.AddType application/x-httpd-php .php .php34.AddType application/x-httpd-php-source .phps5.AddType application/x-httpd-php .php .phpml----3.将系统默认daemon用户改为普通用户moshan(根据自己的情况修改)User moshanGroup moshan----4.添加php的主页文件<IfModule dir_module> DirectoryIndex index.php index.html</IfModule>----5.检查语法并重启[root@moshan apache]# ./bin/apachectl -tSyntax OK[root@moshan apache]# ./bin/apachectl graceful[root@moshan apache]#[root@moshan apache]# netstat -lnt|grep 80tcp 0 0 :::8080 :::* LISTEN tcp 0 0 :::80 :::* LISTEN [root@moshan apache]# ps -ef|grep httpd|grep -v startroot 18573 28278 0 11:21 pts/0 00:00:00 grep httpd[root@moshan apache]----编写php主页文件并授可执行权限[root@moshan htdocs]# cat index.php <?phpphpinfo();?>[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 -pzzmoshanmysql> create database wordpress default character set gbk collategbk_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.* towordpress@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.* towordpress@192.168.24.* identified by 'zzmoshan';--4.创建wp-config.php文件 访问后面的地址按照提示创建即可--http://blog.moshan.com