首页 > 代码库 > Linux服务器集群架构部署搭建(四)WEB服务器LNMP/LAMP搭建部署及站点产品安装(1)
Linux服务器集群架构部署搭建(四)WEB服务器LNMP/LAMP搭建部署及站点产品安装(1)
命运是大海,当你能够畅游时,你就要纵情游向你的所爱,因为你不知道狂流什么会到来,卷走一切希望与梦想。
作者:燁未央_Estelle
声明:测试学习,不足之处,欢迎指正。
第一章 集群WEB服务器LNMP生产应用
1.1 Nginx的应用场合:根据功能来进行应用
①静态服务器(图片,视频服务)国内使用的只有两款,另一个是lighttpd。百度贴吧、豆瓣。html、js、css、flv等。
②动态服务:nginx+fastcgi的方式运行php、jsp。动态的并发很少(根据优化达到500-1500),静态的并发可以大达到好几万。另外mysql的并发也是300-1500.
动态请求的瓶颈在于PHP和Mysql的承受并发能力(500-1500)。
③负载均衡/反向代理:客户端访问Nginx代理,nginx不是抛给web服务处理,而是自己去发起一个请求web。拿到东西,给用户。有自己来处理。即,代理web来处理。反向代理就是代替客户请求内部的服务器。
正向代理拓展:用户80端口请求==》路由器(缓存服务)===》有路由器代理请求网站内容。请求完成之后本地缓存,然后返回给用户。
④缓存服务。参考工具汇总。在企业生产中日PV在参考值2000万以下,都可以使用Nginx代理。http://oldboy.blog.51cto.com/2561410/775056
⑤处理动态数据和大文件的时候Nginx的性能没有Apache有优势。整体来看,处理动态数据的时候,三者差距不大,从测试结果看,Apache更有优势,这是因为,处理动态数据的能力取决于PHP和后端数据库的提供服务能力,也就是说,瓶颈不在于WEB服务器上,一般的PHP引擎支持的并发参考值300-1000,数据库的并发在300-1000.
在工作中,我们要综合考虑选取,比如维护成本,并发高低等因素。====》综合考虑。
⑥基本优势:
1)基于异步IO模型,性能强,能够支持上万并发。
2)对于小文件支持很好,性能很高(限静态小文件)。
3)代码编译,扩展库必须编译进主程序。
4)消耗系统资源比较低。
1.2 选择合适的web服务软件的参考:
①静态业务:采用nginx或者lighttpd根据自己的掌握程度,或者公司的要求。如果预期流量会很大,那么就选择nginx,如果预期流量不会增大,选择apache也是可以的。
②动态业务:采用nginx和apache均可以。
③静态、动态混合业务:nginx或者apache不要多选,要单选。
④动态业务可以由前端代理(haproxy),根据页面元素类型,向后转发相应的服务器进行处理。如果并发不是很大:又对apache很熟悉,采用apache也可以的。apache2.4功能也很强大的并发链接数也有所增加,见后面的压力测试。
⑤提示:nginx做web(apache,lighttpd)、反向代理(haproxy,lvs nat)及缓存服务器(squid)也非常不错的。
##最终建议:如果没有特别的需求,对外的业务使用nginx,对内的业务使用可以选择apache(流量不是很大可以选择yum httpd mysql-server php安装。)
第二章 LNMP架构搭建原理及注意事项
2.1 LANP架构的原理、及相关应用
①LNMP组合(Linux+Nginx+Mysql+PHP),和LAMP的区别就是Nginx和Apache的区别
②LNMP架构原理:用户访问Nginx(80端口)对应的PHP(PHPFCGI形式,9000端口),通过在配置文件中做一个设置(扩展名是PHP的话,通过一个设置),然后把请求提交到PHP9000端口所在机器上面。用户访问Nginx,默认都是Nginx来解析,可以设置什么样的扩展名给PHP来处理(phpFCGI来解析的)。
③Apche是模块配合PHP.Nginx是服务(PHPFCGI的9000端口)来配合PHP的。用户====》Nginx====》PHP====>MySQL。
④Nnginx本身是一款静态(只能解析html、js、cs 图片等)的www软件,特点是(静态小文文件)高并发(同时处理的连接数)、占用的资源少(网上测试:3W并发,10个线程,只消耗150M)
⑤用户访问网站,如果是静态的,直接有CDN进行返回,如果是动态的,由CDN后端的负载均衡器(LB)进行分发到相关指定的WEB服务器,其中web服务器根据分类(帖子、博文)寻找数据库或者(图片、附件就先找CDN,如果CDN没有就访问负载均衡器,负载均衡器会分发到静态服务器上寻找)存储(注意弃用NFS方案)。一般的大型企业,动静分离的,即分为动态服务器、静态服务器。而静态服务器一般就是用Nginx,静态服务器上面不配php 也不配数据库。我们加一个缓存在负载均衡和静态服务器之间,这样往前推,减少Nginx和后方压力。大公司一般会用到CDN(内容更分发网络)。CDN在全国各地都有cache。本地缓存就近访问。并且不会跨线路,网通访问网通,电信访问电信。这样才是一个有效率的网站架构。
注意:AMP架构原理:前端就是一个Apche,负责处理静态请求,动态请求则转交给PHP处理。Apache和PHP的配合是通过模块嵌入到Apache配置文件中的式实现的,帖子博文就需要找后端的Mysql。来实现请求响应。用户====》Apache====》PHP====>MySQL。
2.2 LNMP架构搭建注意事项
①安装nginx软件之前需要安装一个Pcre(Pcre兼容正则表达式),是为了使得nginx支持HTTP Rewrite(伪静态)选择简单的yum install pcre pcre-devel模块。
②安装openssl是为了避免安装过程中的报错。
③注意启动命令直接使用命令启动。
④本地端口检查,本地curl。
⑤解决问题三个步骤:ping IP地址。telnet ip 端口检查浏览器到web服务是否畅通 ,服务器本地curl IP,检查web服务是否开启。最后查看错误日志。
⑥如果遇到说库文件找不到,那么就输入find命令寻找这个库文件,然后编辑配置文件,将路径添加到/etc/ld.so.conf下面去。或者使用命令echo ‘文件路径’ >>/etc/ld.so.conf,然后使用ldconfig生效。
⑦排错的时候注意关闭防火墙和Selinux,查看错误日志。
⑧工作中大多数web和数据库是分离的。所以在web服务器上安装mysql也是需要的,只需要web服务上make install 结束即可(编译方式)。二进制的话,直接解压就可以。实际上就是为了在编译PHP的时候要指定mysql路径。要通过mysql的包来生成PHP的调用mysql的函数。就是相当于mysql的客户端。
⑨免安装mysql的PHP安装需要将编译参数中的指定mysql路径”--with-mysql=/application/mysql \”参数换成下面三个编译参数:
--with-mysql=mysqlnd \
--with-mysql=mysqlnd \
--with-pdo-mysql=mysqlnd \
⑩期末架构搭建的软件版本选择:
nginx:nginx-1.6.2
php: php-5.3.27
第三章 LNMP部署搭建实际操作
3.1 部署WEB服务LNMP操作流程
①选择Nginx版本:(最新版本1.6.2)
②下载nginx软件到指定目录之后先安装pcre软件yum install pcre pcre-devel -y。安装openssl软件yum install openssl openssl-devel -y。
③解压下载的nginx文件,创建虚拟用户和用户组之后,按照编译参数进行编译安装。
④make && make install 然后退回到toos目录创建软件链接。
⑤启动nginx:/application/nginx/sbin/nginx,启动前检查语法/application/nginx/sbin/nginx -t。
⑥本地检查curl、本地端口检查。
⑦打开宿主机的IP浏览器访问。出现成功提示。
3.2 搭建WEB服务LNMP实践操作
####下载或上传安装所需要的软件: [root@Nginx_web-02 ~]# cd /home/ts/toos/ [root@Nginx_web-02 toos]# yum install pcre pcre-devel -y [root@Nginx_web-02 toos]# yum install openssl openssl-devel -y [root@Nginx_web-02 toos]# rpm -qa pcre* open* openssl098e-0.9.8e-18.el6_5.2.x86_64 openssh-5.3p1-94.el6.x86_64 pcre-devel-7.8-6.el6.x86_64 openldap-2.4.23-34.el6_5.1.x86_64 openssl-1.0.1e-16.el6_5.15.x86_64 pcre-7.8-6.el6.x86_64 openssh-clients-5.3p1-94.el6.x86_64 openssl-devel-1.0.1e-16.el6_5.15.x86_64 openssh-server-5.3p1-94.el6.x86_64 [root@Nginx_web-02 toos]# ll total 788 -rw-r--r-- 1 root root 804164 Sep 16 22:45 nginx-1.6.2.tar.gz [root@Nginx_web-02 toos]# tar xf nginx-1.6.2.tar.gz [root@Nginx_web-02 toos]# cd nginx-1.6.2 ##创建用户nginx并且进行编译安装 [root@Nginx_web-02 nginx-1.6.2]# useradd nginx -s /sbin/nologin -M [root@Nginx_web-02 nginx-1.6.2]# id nginx uid=501(nginx) gid=501(nginx) groups=501(nginx) [root@Nginx_web-02 nginx-1.6.2]# ./configure --user=nginx --group=nginx --prefix=/application/nginx1.6.2 --with-http_stub_status_module --with-http_ssl_module [root@Nginx_web-02 nginx-1.6.2]# make && make install [root@Nginx_web-02 nginx-1.6.2]# echo $? 0 ##创建链接 [root@Nginx_web-02 toos]# ln -s /application/nginx1.6.2/ /application/nginx [root@Nginx_web-02 toos]# ll /application/nginx lrwxrwxrwx 1 root root 24 Oct 15 23:07 /application/nginx -> /application/nginx1.6.2/ [root@Nginx_web-02 nginx]# ll /application/nginx/ total 16 drwxr-xr-x 2 root root 4096 Dec 12 11:11 conf drwxr-xr-x 2 root root 4096 Dec 12 11:11 html drwxr-xr-x 2 root root 4096 Dec 12 11:11 logs drwxr-xr-x 2 root root 4096 Dec 12 11:11 sbin##检查语法并且启动服务: [root@Nginx_web-02 toos]# /application/nginx/sbin/nginx -t nginx: the configuration file /application/nginx1.6.2/conf/nginx.conf syntax is ok nginx: configuration file /application/nginx1.6.2/conf/nginx.conf test is successful [root@Nginx_web-02 toos]# /application/nginx/sbin/nginx [root@Nginx_web-02 toos]# netstat -lntup|grep nginx tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 5235/nginx [root@Nginx_web-02 toos]# ps -ef | grep nginx root 3466 1 0 11:13 ? 00:00:00 nginx: master process /application/nginx/sbin/nginx nginx 3467 3466 0 11:13 ? 00:00:00 nginx: worker process root 3471 1053 0 11:14 pts/0 00:00:00 grep nginx ###浏览器验证:(输入本机的IP地址进行验证),注意(需要在windows客户端的hosts文件做IP解析)
##小结: ##安装准备: ##下载nginx软件: cd /home/ts/tools/ wget http://nginx.org/download/nginx-1.6.2.tar.gz ##安装pcre软件和openssl软件: yum install pcre pcre-devel -y yum install openssl openssl-devel -y ##安装nginx参数: tar xf nginx-1.6.2.tar.gz cd nginx-1.6.2 useradd nginx -s /sbin/nologin -M ##编译参数安装:./configure --user=nginx --group=nginx --prefix=/application/nginx1.6.2 --with-http_stub_status_module --with-http_ssl_module make && make install ##创建链接 ln -s /application/nginx1.6.2/ /application/nginx ##启动nginx /application/nginx/sbin/nginx -t /application/nginx/sbin/nginx ##浏览器IP地址打开查看 http://192.168.10.54/
3.3 基于域名的站点目录配置步骤
①编辑配置文件。
②创建目录下的主页文件。
③检查nginx语法。
④启动nginx。
⑤编辑本地的host文件设置解析本地IP。
⑥本地cmd中ping 站点地址 正常返回IP。
⑦浏览器中打开主页地址,正常返回设置内容。
⑧基于端口的虚拟主机设置:修改配置文件中的端口为8000、8001、8002.就是格局端口来区分访问。此时访问不看域名。
⑨基于IP的虚拟主机设置:可能需要多个IP地址来进行实践。
配置别名临时IP。按照Apache的方法来进行配置。最简单的就是在端口前端加上IP地址。
(注意选择没有使用的虚拟IP地址,否则会造成后续使用冲突)
⑩我们在进行配置的时候,通过包含的方式来做。也可是创建一个extra文件,然后删掉配置文件中所有的server标签,之后输入以下内容:
include extra/www.conf
include extra/blog.conf
include extra/bbs.conf
然后将以下内容通过echo分别添加到以上三个文件中
server {
listen 80;
server_name www.etiantian.org;
root html/www;
index index.html index.htm;
}
##此种做法的作用:就是如果虚拟主机太多的情况下。我们修改某个配置文件就可以更改某个虚拟机文件。不需要改的不需要去天天看到。
3.4 基于域名的站点目录配置实践
[root@Nginx_web-02 conf]# ll /application/nginx/conf/nginx.conf -rw-r--r-- 1 root root 1559 Oct 18 00:16 /application/nginx/conf/nginx.conf [root@Nginx_web-02 conf]# cp nginx.conf nginx.conf.bak [root@Nginx_web-02 conf]# egrep -v "#|^$" nginx.conf.default >nginx.conf [root@Nginx_web-02 conf]# vim nginx.conf ##编辑配置内容如下: worker_processes 2; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; ######################################################___1 server { listen 80; server_name www/etiantian.org; root /data/html/www; index index.html index.htm; } ######################################################___2 server { listen 80; server_name blog/etiantian.org; root /data/html/blog; index index.html index.htm; } ######################################################___3 server { listen 80; server_name bbs/etiantian.org; root /data/html/bbs; index index.html index.htm; } } [root@Nginx_web-02 data]# mkdir /data/html/{www,blog,bbs,wiki} -p [root@Nginx_web-02 data]# touch /data/html/{www,blog,bbs,wiki}/index.html [root@Nginx_web-02 data]# for name in www blog bbs wiki;do echo "http://$name.etiantian.org" >/data/html/$name/index.html;done [root@Nginx_web-02 data]# for name in www blog bbs wiki;do cat /data/html/$name/index.html;done http://www.etiantian.org http://blog.etiantian.org http://bbs.etiantian.org http://wiki.etiantian.org [root@Nginx_web-02 conf]# ../sbin/nginx -t [root@Nginx_web-02 conf]# /application/nginx/sbin/nginx -t nginx: the configuration file /application/nginx1.6.2/conf/nginx.conf syntax is ok nginx: configuration file /application/nginx1.6.2/conf/nginx.conf test is successful [root@Nginx_web-02 conf]# ps -ef |grep nginx root 3510 1 0 11:29 ? 00:00:00 nginx: master process /application/nginx/sbin/nginx nginx 3511 3510 0 11:29 ? 00:00:00 nginx: worker process nginx 3512 3510 0 11:29 ? 00:00:00 nginx: worker process root 3514 1053 0 11:29 pts/0 00:00:00 grep nginx ##修改本地host文件 解析设置的IP地址(注意点) 10.0.0.53 www.etiantian.org blog.etiantian.org bbs.etiantian.org ####配置虚拟主机的流程小结(重点) ①复制一个标签段,到结尾。注意要放在http模块结束大括号前,也就是server标签放入http标签, ②更改server_name及相对应网页的root根目录。 ③检查配置文件语法,平滑重启服务。 ../sbin/nginx -s reload ④创建server_name对应网页的根目录,并建立测试文件,如果没有index首页会出现403报错。在客户端对server的主机名做host解析或者DNS设置,并检查(ping 域名 成功返回IP地址)。 ⑤win32浏览器访问,或者在linux客户端做host解析,用wget或者curl访问。 ⑥注意错误提示,以及解决办法。
3.4 Nginx状态信息显示、别名、301跳转域名
①①为虚拟主机增加一个状态的server标签=====》配置nginx状态信息虚拟主机内容参考具体操作。
②检查语法并且优雅重启。
③本地host做一个状态解析。status.et iant ian.org
④本地cmd中ping 状态信息域名,成功返回IP地址。
⑤本地浏览器中输入状态信息域名进行查看。
[[root@Nginx_web-02 conf]# vim nginx.conf ##在配置文件末尾加上以下server标签内容 ##status server { listen 80; server_name status.etiantian.org; stub_status on; access_log off; } [[root@Nginx_web-02 conf]# ../sbin/nginx -t nginx: the configuration file /application/nginx1.6.2/conf/nginx.conf syntax is ok nginx: configuration file /application/nginx1.6.2/conf/nginx.conf test is successful [[root@Nginx_web-02 conf]# ../sbin/nginx -s reload ##修改本地host文件 解析设置的IP地址 192.168.109.130 etiantian.org status.etiantian.org ##本地cmd中ping status.etiantian.org ##本地浏览器中打开主页地址,正常返回内容。 ##至此,状态信息,设置成功。 ##状态信息结果详解如下: 例:打开: http://status有如下显示 Active connections: 2872 ---------------------------------#====》表示nginx正处理的活动链接数量 server accepts handled requests ---------------------------------#====》表示如下:注释 29420179 29420179 104353678 Reading:80 Writing:35 Waiting:2757 ##server下面的数字表示启动到现在一共处理多少个(当前的活跃的链接)链接; ##accepts表示nginx启动成功到现在共成功创建多少次握手,求求丢失数=(握手数量-连接数),可以看出来本次状态显示没有丢失请求。 ##handled requests表示总共处理了多少次的请求。 ##Reading表示读取到客户端的Header信息数量; ##Writing表示返回客户端的Header信息数量; ##Waiting表示Nginx已经处理完正在等候下一次请求的驻留链接,开启keep-alive的情况下,这个值等于active-(reading+writing)。 ####别名网页访问显示设置 ①别名访问的正确访问 在配置文件中的域名设置的后面加上 etiantian.org,即可实现别名访问。(空格的形式实现别名) ##Apache的指定别名则是ServerAlias 指定别名。 ②修改配置文件之后,仍然需要本地host文件解析。 访问浏览器之后正常访问。
3.6 信息提示301跳转域名
##实现方法:
##在配置文件中设置增加一行:
server_name etiantian.org; -----------------------------------------#====》表示当我们访问etiantian.org的时会自动跳转到 http://www.etiantian.org
root html/www;
index index.html index.htm;
rewrite ^/(.*)$ http://www.etiantian.org/$1 permanent;
##表示访问/(.*)域名下的所有内容,均跳永久转到http://www.etiantian.org这个下面。
##斜线/的前面就是域名,小括号(.*)表示访问内容,用$1来取出前面小括号里面的内容。permanent表示永久跳转。
##每次修改配置文件,均需要检查语法和平滑重启。
##rewrite:地址重写
##有时候我们会遇到这样一种需求,就是用户直接以IP地址来访问,此时我们需要做一个重定向让其自动跳转到我们的配置的其他访问主页。
##访问IP就相当于访问第一个虚拟主机。第一个虚拟主机可以什么也不做就做跳转服务。这样可以禁止恶意域名绑定。
3.7 执行脚本安装nginx服务
执行脚本安装需要注意的事项:
①网络连接必须畅通,否则可能造成下载软件以及YUM安装失败。
②执行脚本前,需要确认安装的软件版本以及环境
③安装nginx软件前需要注意安装必备的软件插件(prce opssl)
④重点配置文件的调用,需要实现进行配置完成。方便脚本调用,或者使用cat增添配置文件内容。
⑤需要在windows客户端,host文件做安装服务的IP地址以及对应的域名解析。
3.8 Nginx日志分析工具推荐、常见状态码。
①日志分析的软件:syslog,rsyslog,Awstats,flume logstash scribe kafka,storm。
对nginx的分析日志软件推荐使用 Awstats。
参考SVN文档学生总结-老男孩linux运维实战培训awstats总结文档
②生产环境常见状态嘛需要了解的:
200:正常
301:永久跳转到新位置
403:禁止访问 服务器拒绝请求,没有权限访问。
404:找不到请求页面。
500:内部服务器出错了。配置的不对。
502:网关服务访问后端服务的受,后端服务没有按照http协议正常返回,一般都是负载均衡/反向代理的错误了。
503:服务不可用的时候,一般都是超载或停机维护。
504:网管超时,一半是前端服务器请求后端服务的时候,后端服务在特定的时间,没有完成服务。
第四章 LNMP架构数据库及PHP整合
4.1 PHP的安装部署操作
#################第一步就是安装PHP依赖的插件#################### [root@Nginx_web-02 ~]# cd /home/tslove/toos/ [root@Nginx_web-02 toos]# yum install -y libxslt-devel [root@Nginx_web-02 toos]# yum install zlib libxml libjpeg freetype libpng gd curl libiconv zlib-devel libxml2-devel libjpeg-devel freetype-devel libpng-devel gd-devel curl-devel -y [root@Nginx_web-02 toos]# rpm -qa zlib libxml libjpeg freetype libpng gd curl libiconv zlib-devel libxml2-devel libjpeg-devel freetype-devel libpng-devel gd-devel curl-devel zlib-1.2.3-29.el6.x86_64 zlib-devel-1.2.3-29.el6.x86_64 freetype-2.3.11-14.el6_3.1.x86_64 libpng-1.2.49-1.el6_2.x86_64 curl-7.19.7-40.el6_6.3.x86_64 freetype-devel-2.3.11-14.el6_3.1.x86_64 gd-2.0.35-11.el6.x86_64 gd-devel-2.0.35-11.el6.x86_64 libpng-devel-1.2.49-1.el6_2.x86_64 libxml2-devel-2.7.6-17.el6_6.1.x86_64 ##上传所需要安装的软件及插件 [root@Nginx_web-02 toos]# ll total 23000 -rw-r--r-- 1 root root 4984397 Oct 7 06:13 libiconv-1.14.tar.gz -rw-r--r-- 1 root root 1335178 Feb 19 2007 libmcrypt-2.5.8.tar.gz -rw-r--r-- 1 root root 471915 Nov 22 2008 mcrypt-2.6.8.tar.gz -rw-r--r-- 1 root root 931437 Dec 8 2008 mhash-0.9.9.9.tar.gz drwxr-xr-x 9 1001 1001 4096 Dec 12 11:10 nginx-1.6.2 -rw-r--r-- 1 root root 804164 Sep 16 22:45 nginx-1.6.2.tar.gz -rw-r--r-- 1 root root 15008639 Jul 11 2013 php-5.3.27.tar.gz [root@Nginx_web-02 toos]#tar zxf libiconv-1.14.tar.gz cd libiconv-1.14 ./configure --prefix=/usr/local/libiconv make make install cd ../ [root@Nginx_web-02 libiconv-1.14]# cd ../ [root@Nginx_web-02 libiconv-1.14]# tar zxf libmcrypt-2.5.8.tar.gz cd libmcrypt-2.5.8 ./configure make make install sleep 2 /sbin/ldconfig cd libltdl/ ./configure --enable-ltdl-install make make install cd ../../ [root@Nginx_web-02 libiconv-1.14]# tar zxf mhash-0.9.9.9.tar.gz cd mhash-0.9.9.9/ ./configure make make install sleep 2 cd ../ rm -f /usr/lib64/libmcrypt.* rm -f /usr/lib64/libmhash* ln -s /usr/local/lib64/libmcrypt.la /usr/lib64/libmcrypt.la ln -s /usr/local/lib64/libmcrypt.so /usr/lib64/libmcrypt.so ln -s /usr/local/lib64/libmcrypt.so.4 /usr/lib64/libmcrypt.so.4 ln -s /usr/local/lib64/libmcrypt.so.4.4.8 /usr/lib64/libmcrypt.so.4.4.8 ln -s /usr/local/lib64/libmhash.a /usr/lib64/libmhash.a ln -s /usr/local/lib64/libmhash.la /usr/lib64/libmhash.la ln -s /usr/local/lib64/libmhash.so /usr/lib64/libmhash.so ln -s /usr/local/lib64/libmhash.so.2 /usr/lib64/libmhash.so.2 ln -s /usr/local/lib64/libmhash.so.2.0.1 /usr/lib64/libmhash.so.2.0.1 ln -s /usr/local/bin/libmcrypt-config /usr/bin/libmcrypt-config [root@Nginx_web-02 libiconv-1.14]#tar zxf mcrypt-2.6.8.tar.gz cd mcrypt-2.6.8/ /sbin/ldconfig ./configure LD_LIBRARY_PATH=/usr/local/lib make make install cd ../ sleep 2 #################第二步就是安装PHP软件####################### [root@Nginx_web-02 toos]#yum install openssl-devel -y [root@Nginx_web-02 toos]# tar xf php-5.3.27.tar.gz [root@Nginx_web-02 toos]# cd php-5.3.27 [root@Nginx_web-02 php-5.3.27]# ./configure --prefix=/application/php5.3.27 --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-iconv-dir=/usr/local/libiconv --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-curl --enable-short-tags --enable-zend-multibyte --with-gd --with-xmlrpc --with-openssl --enable-soap --enable-sockets --with-xsl --enable-mbstring --enable-gd-native-ttf --with-libxml-dir=/usr --enable-static --enable-xml --disable-rpath --enable-safe-mode --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curlwrappers --enable-mbregex --enable-fpm --with-mcrypt --with-mhash --enable-pcntl --enable-zip --with-fpm-user=nginx --with-fpm-group=nginx --enable-ftp ###出现以下界面表示编译完成 +--------------------------------------------------------------------+ | License: | | This software is subject to the PHP License, available in this | | distribution in the file LICENSE. By continuing this installation | | process, you are bound by the terms of this license agreement. | | If you do not agree with the terms of this license, you must abort | | the installation process at this point. | +--------------------------------------------------------------------+ Thank you for using PHP. [root@Nginx_web-02 php-5.3.27]# ln -s /application/mysql/lib/libmysqlclient.so.18 /usr/lib64/ [root@Nginx_web-02 php-5.3.27]# make && make install [root@Nginx_web-02 php-5.3.27]# ln -s /application/php5.3.27/ /application/php
4.2 PHP配置文件的修改配置
[root@Nginx_web-02 ~]# cd /application/php/etc/ [root@Nginx_web-02 etc]# ls -l total 28 -rw-r--r-- 1 root root 1232 Dec 12 12:40 pear.conf -rw-r--r-- 1 root root 21683 Dec 12 12:40 php-fpm.conf.default [root@Nginx_web-02 etc]# cp php-fpm.conf.default php-fpm.conf.default.bak ##配置文件进行比较注释: 修改后的文件: pid = /app/logs/php-fpm.pid #====》修改部分内容源文件是注释掉的,我们将其打开,并添加路径 /apple/logs。 error_log = /app/logs/php-fpm.log #====》修改部分内容源文件是注释掉的,我们将其打开,并指定放入的路径/apple/logs。 log_level = error #====》修改部分内容源文件是通知,我们只选择需要的错误日志。 rlimit_files = 32768 #====》修改部分内容文件描述符,源文件为1024.PHP也许文件描述符,我们变大到32768. events.mechanism = epoll #====》修改部分内容 listen.owner = nginx #====》修改部分内容源文件是注释掉的,我们将其打开。我们编译的时候已经指定用户和组了。(监听用户一定要和nginx一样,才能正常监听) listen.group = nginx #====》修改部分内容源文件是注释掉的,我们将其打开。我们编译的时候已经指定用户和组了。(监听用户一定要和nginx一样,才能正常监听) pm.max_children = 1024 #====》修改部分内容源文件最大子进程的数量为5,我们修改为1024. pm.start_servers = 16 #====》修改部分内容源文件为2,我们修改为16,启动的时候初始子进程数量。 pm.min_spare_servers = 5 #====》修改部分内容源文件为1,我们修改为5,最少子进程进程启动数量。 pm.max_spare_servers = 20 #====》修改部分内容 源文件为3.我们修改为20.最大的剩余子进程。 pm.process_idle_timeout = 15s; #====》修改部分内容每个空闲进程运行指定时间。后杀掉。源文件为10. pm.max_requests = 2048 #====》修改部分内容每一个子进程服务多少个进程之后退出。然后重新启动。源文件为500,我们修该为2046. ;access.format = %R - %u %t "%m %r%Q%q" %s %f %{mili}d %{kilo}M %C%% #====》修改部分内容日至格式 slowlog = /app/logs/$pool.log.slow #====》修改部分内容 ,慢查询 计入log。 request_slowlog_timeout = 10 #====》修改部分内容 超时的参数。 php_admin_value[sendmail_path] = /usr/sbin/sendmail -t -i -f 569135810@qq.com #====》修改部分内容 邮箱,邮件接收地址。 [root@Nginx_web-02 etc]# ll total 100 -rw-r--r-- 1 root root 1232 Dec 12 12:40 pear.conf -rw-r--r-- 1 root root 21688 Oct 7 06:21 php-fpm.conf -rw-r--r-- 1 root root 21688 Dec 12 13:50 php-fpm.conf.bak -rw-r--r-- 1 root root 21688 Dec 12 13:44 php-fpm.conf.default -rw-r--r-- 1 root root 21683 Dec 12 13:36 php-fpm.conf.default.bak [root@Nginx_web-02 etc]# /application/php/sbin/php-fpm -t [12-Dec-2014 13:50:52] NOTICE: configuration file /application/php5.3.27/etc/php-fpm.conf test is successful [root@Nginx_web-02 etc]# /application/php/sbin/php-fpm [root@Nginx_web-02 etc]# /application/php/sbin/php-fpm -t [root@Nginx_web-02 etc]# netstat -lntup|grep php-fpm tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 51876/php-fpm ###将以下三项放入到/etc/rc.local,开机启动。文件中开启服务是从后往前,开启,停止服务是从前往后停止。 ##nginx+php-fpm by TS at 2014.10.09 /application/nginx/sbin/nginx /application/php/sbin/php-fpm [root@Nginx_web-02 etc]# vim /etc/rc.local ##nginx+php-fpm by TS at 2014.10.09 /application/nginx/sbin/nginx /application/php/sbin/php-fpm #########注意php的启动文件是php-fpm,配置文件是php.ini############ #配置文件的所在目录为/home/tslove/toos/php-5.3.27/ 开发和生产环境配置文件的区别在于是否打开logs 。 [root@Nginx_web-02 php-5.3.27]# ll |grep "php.ini" -rw-r--r-- 1 101 101 69606 Jul 11 2013 php.ini-development (开发使用的) -rw-r--r-- 1 101 101 69627 Jul 11 2013 php.ini-production (一般生产用选择这个) [root@Nginx_web-02 php-5.3.27]# cp php.ini-production /application/php/lib/php.ini ###php.ini主要的配置文件的参数修改。会子啊深入优化中具体进行配置。
4.3 LNMP整合配置实践操作
①确定nginx的正常启动部署,PHP的安装正确完成。免安装数据库的PHP编译,注意三个mysqlnd参数。
②如果数据库不是分离的话,同时需要保证数据库的链接正常。
③修改nginx的主配置文件,增加index.php解析,这里注意使用正确的模版。
④在nginx配置文件中指定的访问目录文件,创建index.php文件
⑤每一次修改配置文件都需要nginx的平滑重启。
⑥在测试之前,确保(数据库:如有)php-fpm和nginx的正常启动以及语法检查无误。
⑦浏览器输入域名,后面加上index.php进行验证。
###修改的nginx配置文件内容默认: # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # #location ~ \.php$ { # root html; # fastcgi_pass 127.0.0.1:9000; # fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; # include fastcgi_params; #} ###修改之后的配置文件nginx.conf内容: worker_processes 2; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; #################### www ############################ server { listen 80; server_name www.etiantian.org; root /data/html/www; index index.php index.html index.htm; access_log logs/www_access.log; location ~ .*\.(php|php5)?$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi.conf; } } #################### blog ############################ server { listen 80; server_name blog.etiantian.org; root /data/html/blog; index index.php index.html index.htm; access_log logs/blog_access.log; location ~ .*\.(php|php5)?$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi.conf; } } #################### bbs ############################ server { listen 80; server_name bbs.etiantian.org; root /data/html/bbs; index index.php index.html index.htm; access_log logs/bbs_access.log; location ~ .*\.(php|php5)?$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi.conf; } } } ################测试文件index.php##################### 在配置文件的指定目录下面建立index.php文件 编辑内容如下: <?php phpinfo(); ?> ###如果是在WEB本机安扎un个数据库mysql软件的情况下: ##修改完之后,检查语法,并且重启服务,然后浏览器进行验证。 ##此处注意事项,默认的配置文件中的支持php格式的的模版是5.3以前的使用。 ###连接数据库测试页面显示脚本 [[root@Nginx_web-02 bbs]# vi ts_mysql.php ##编辑内容: <?php //$link_id=mysql_connect(‘主机名‘,‘用户‘,‘密码‘); $link_id=mysql_connect(‘localhost‘,‘root‘,‘oldboy123‘) or mysql_error(); if($link_id){ echo "mysql successful by TS !"; }else{ echo mysql_error(); } ?> #浏览器验证 ##也可以在linux中直接执行: [[root@Nginx_web-02 bbs]# /application/php/bin/php ts_mysql.php mysql successful by TS ! [[root@Nginx_web-02 bbs]# /etc/init.d/mysqld stop Shutting down MySQL. SUCCESS! [[root@Nginx_web-02 bbs]# /application/php/bin/php ts_mysql.php PHP Warning: mysql_connect(): Can‘t connect to local MySQL server through socket ‘/tmp/mysql.sock‘ (2) in /application/nginx1.6.2/html/bbs/ts_mysql.php on line 3 Can‘t connect to local MySQL server through socket ‘/tmp/mysql.sock‘ (2) ###至此,LNMP搭建部署完毕!
第五章 LAMP架构的生产应用及注意事项
5.1 当前互联网主流web服务
静态服务:
①apache:中小型企业使用普遍的web服务主流,web服务的老大哥。
②nginx:大型新兴网站的静态web服务主流,web服务中的初生牛犊,超大规模的门户网站使用普遍。
③lighttpd:静态web服务,不温不火,面临逐渐淘汰意味。社区不活跃,但是解析效率很高的。
动态服务:
①IIS 微软的web服务器(能够解析静态的,以及asp,aspx等动态网页)。
②tomcat:中小企业web服务,互联网java容器主流(jsp.do)。
③resin:大型动态web服务,互联网java容器主流(jsp.do比如百度使用)。
④php(fcgi):php程序的解析容器。
配合apche,不是守护进程,不能启动服务。,php并不是守护进程而是模块(module)的方式,一般表示形式mod_php5.so。
配合nginx,lighttpd,php是守护进程模式。FCGI模式。
5.2 Apache为例及yum安装包的注意事项
以apache为例(基础掌握之后可以自己摸索了解实践):
①一般中小企企业使用编译安装的方式安装apache:比较灵活,只编译你想要的参数(msql)。
②yum安装或rpm安装:简单、方便但是不够灵活,
访问量小或者内部使用的http的时候,多用yum install httpd -y 进行安装。
追求方便的时候可以使用yum安装。
服务器数量比如几千台的服务器安装apache(考虑编译成本、维护成本)。
③高级安装:内部人员通过源码,制作成符合自己需要的rpm包,放置在自己的yum仓库。但是缺点就是难度高。
http://oldboy.blog.51cto.com/2561410/1121745
http://dreamway.blog.51cto.com/1281816/1110822
5.3 Apache的特点及应用场合
特点:功能强大、配置简单、速度快、应用广泛、性能稳定可靠,并且可以做代理服务器或者负载均衡使用。
应用场合(本身是静态软件,但是可以结合动态软件):
a.使用Apache运行静态的HTML网页、图片,处理大文件效率高,(处理静态小文件能力不及Nginx)。
b.使用Apache结合PHP引擎运行PHP、Perl、Python等程序,LAMP被称之为经典组合。
c.使用Apache结合Tomcat/Resin运行JSP,java等程序,称为中小企业的首选。
d.使用Apache做代理、负载均衡、rewrite规则过滤等等。
##案例:
案例1:apache不记录图片的日志
答:因为统计日志PV时一个页面才算一个PV,而图片,JS,CSS等只是图片的元素,如果记录在日志里,然后按日志行计算PV就不准确了,所以可考虑不记录图片等的日志。
<FilesMatch "\.(css|js|gif|jpg|ico|swf)">
SetEnv IMAG 1
</FilesMatch>
实际日志配置:
CustomLog "|/usr/local/sbin/cronolog /app/logs/%Y/%m/access_%Y%m%d.log" combined env=!IMAG
2.RS服务器不记录负载均衡健康检查日志
###参考博客:
apache日志轮询技术(cronolog and rotatelogs)http://oldboy.blog.51cto.com/2561410/584513
第六章 LAMP的搭建部署步骤及注意事项
6.1 LAMP介绍参考及注意事项
一般来说操作系统自带或者apache rpm包方法安装的apache版本都比较低且更新不及时,因此需要卸载掉安装操作系统时候默认被安装的apache软件。
①查询当前系统安装的apache软件包。
②卸载指定的安装软件包rpm -e 包名 (包名可以使用rpm -qa 包名查询),如果提示错误,可以使用 rpm -e --nodpes 包名(不考虑依赖)进行卸载。
③下载安装软件包:使用wget在指定目录进行下载。
④下载完成后,查询该软件包相关信息(存在与否、大小信息)。
⑤解压下载的软件包tar zxvf 或者tar xf(最简单解压)。
⑥进入httpd-2.2.27目录,进行查询,主要查看文件:README文件和INSTALL.(使用陌生软件需要查看)
⑦进行具体编译安装操作configure make makeinstall
⑧然后创建硬链接。使用ln命令。
⑨查看apache目录信息,确认操作是否正确。
##编译参数## ./configure --prefix=/application/apache2.2.27 -------#==》(安装目录)如果不指定perfix 的话,那么apache将被默认的安装到/usr/local/目录下面的 --enable-deflate ---------------------------------#==》压缩:(返回时压缩,速度快,带宽小,但消耗CPU,主要对象为文本,图片视频不能压缩) --enable-expires ---------------------------------#==》浏览器缓存时间:(服务器端参数,浏览器打开页面之后,缓存时间长短) --enable-headers ---------------------------------#==》(http 头) --enable-modules=most ---------------------------------#==》(激活大多数的模块,常用功能激活) --enable-so ---------------------------------#==》(激活动态共享对象) --with-mpm=worker ---------------------------------#==》(mpm:两种模式、线程,选择worker模式,提供服务的不同模式,优缺点主要考虑稳定性,进程管理线程,比较稳定) --enable-rewrite ---------------------------------#==》(伪静态功能) ##参考推荐博文 第一篇:详解linux netstat输出的网络连接状态信息 http://oldboy.blog.51cto.com/2561410/1184139 第二篇:获取连接状态数的awk数组命令 http://oldboy.blog.51cto.com/blog/2561410/1184165 第三篇:awk数组命令经典生产实战应用拓展 http://oldboy.blog.51cto.com/blog/2561410/1184177 第四篇:awk考试题案例(门户面试题解答) http://oldboy.blog.51cto.com/2561410/1184206 第五篇:linux生产服务器有关网络状态的优化措施(告一段落) http://oldboy.blog.51cto.com/2561410/1184228 老男孩学生的总结分享: rpm包制作介绍及实战操作讲解 (学生分享) http://oldboy.blog.51cto.com/2561410/1121725 http://oldboy.blog.51cto.com/2561410/1121745 http://dreamway.blog.51cto.com/1281816/1110822 yum源及yum仓库搭建(学生分享) http://oldboy.blog.51cto.com/2561410/1126453 http://dreamway.blog.51cto.com/1281816/1110874
6.2 LAMP搭建部署步骤流程
①首先安装Apache所需要的插件:yum install zlib zlib-devel -y 避免安装报错。安装过程中注意使用$?来查看安装步骤是否正确。
②编译安装Apache并且make&&make install完成之后创建连接进行查看确认。
③在安装PHP时候注意使用免 安装mysql参数进行编译。
④修改相关配置文件,整体LAMP.
⑤本地调试。确认LAMP部署正常。
6.3 LAMP实际搭建部署操作实践
[root@Apache_web-01 toos]# ll total 7344 -rw-r--r-- 1 root root 7519677 Mar 19 2014 httpd-2.2.27.tar.gz [root@Apache_web-01 toos]# ls -sh httpd-2.2.27.tar.gz 7.2M httpd-2.2.27.tar.gz [root@Apache_web-01 toos]# tar xf httpd-2.2.27.tar.gz [root@Apache_web-01 toos]# cd httpd-2.2.27 [root@Apache_web-01 toos]# yum install zlib zlib-level -y [root@Apache_web-01 toos]# cd httpd-2.2.27 [root@Apache_web-01 httpd-2.2.27]# ./configure > --prefix=/application/apache2.2.27 > --enable-deflate > --enable-expires > --enable-headers > --enable-modules=most > --enable-so > --with-mpm=worker > --enable-rewrite [root@Apache_web-01 httpd-2.2.27]# make && make install [root@Apache_web-01 httpd-2.2.27]# ln -s /application/apache2.2.27/ /application/apache [root@Apache_web-01 httpd-2.2.27]# ll /application/apache/ total 60 drwxr-xr-x 2 root root 4096 Dec 12 16:22 bin drwxr-xr-x 2 root root 4096 Dec 12 16:22 build drwxr-xr-x 2 root root 4096 Dec 12 16:22 cgi-bin drwxr-xr-x 4 root root 4096 Dec 12 16:22 conf drwxr-xr-x 3 root root 4096 Dec 12 16:22 error drwxr-xr-x 2 root root 4096 Mar 14 2014 htdocs drwxr-xr-x 3 root root 4096 Dec 12 16:22 icons drwxr-xr-x 2 root root 4096 Dec 12 16:22 include drwxr-xr-x 3 root root 4096 Dec 12 16:22 lib drwxr-xr-x 2 root root 4096 Dec 12 16:22 logs drwxr-xr-x 4 root root 4096 Dec 12 16:22 man drwxr-xr-x 14 root root 12288 Mar 14 2014 manual drwxr-xr-x 2 root root 4096 Dec 12 16:22 modules
6.4 启动Apache进行访问确认
①根据安装情况,服务目录为/application/apache/bin/apachectl,使用-t参数检查语法。
②进行语法检查,/application/apache/bin/apachectl start
③查看服务端口开启信息,lsof -i :80
④查看服务端进程,ps -ef|grep httpd
⑤浏览器地址输入安装apache服务端IP地址,显示 It works!。则表示apache安装正确。
[root@Apache_web-01 httpd-2.2.27]# /application/apache/bin/apachectl -t Syntax OK [root@Apache_web-01 httpd-2.2.27]# /application/apache/bin/apachectl start [root@Apache_web-01 httpd-2.2.27]# [root@Apache_web-01 httpd-2.2.27]# netstat -lntup|grep 80 tcp 0 0 :::80 :::* LISTEN 57242/httpd [root@Apache_web-01 httpd-2.2.27]# lsof -i :80 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME httpd 57242 root 4u IPv6 49557 0t0 TCP *:http (LISTEN) httpd 57244 daemon 4u IPv6 49557 0t0 TCP *:http (LISTEN) httpd 57245 daemon 4u IPv6 49557 0t0 TCP *:http (LISTEN) httpd 57246 daemon 4u IPv6 49557 0t0 TCP *:http (LISTEN) [root@Apache_web-01 httpd-2.2.27]# ps -ef | grep http root 57242 1 0 20:30 ? 00:00:00 /application/apache2.2.27/bin/httpd -k start daemon 57243 57242 0 20:30 ? 00:00:00 /application/apache2.2.27/bin/httpd -k start daemon 57244 57242 0 20:30 ? 00:00:00 /application/apache2.2.27/bin/httpd -k start daemon 57245 57242 0 20:30 ? 00:00:00 /application/apache2.2.27/bin/httpd -k start daemon 57246 57242 0 20:30 ? 00:00:00 /application/apache2.2.27/bin/httpd -k start root 57336 1036 0 20:31 pts/0 00:00:00 grep http ######不能正常显示It works 处理 ①检查防火墙是否关闭: /etc/init.d/iptables status(查看防火墙状态)如果运行,则关闭防火墙后进行Apache调试。如果是生产环境,需要允许80端口的访问,而不是关闭防火墙。 ②检查Selinux是否关闭:setenforce 0(临时关闭),修改/etc/selinux/config 文件将SELINUX=enforcing改为SELINUX=disabled(永久关闭)。 ③检查httpd端口80是否存在:netstat -lnt|grep 80。 ④检查httpd进程是否存在:ps -ef|grep httpd。 ⑤本地服务器wget http://192.168.109.128测试(本地IP地址)。 ##注意修改主配置文件内容:ServerName 127.0.0.1:80 ##注意添加本地host文件对应WEB服务器的IP以及域名的解析。
6.5 Apache目录结构及主配置文件
####网站目录位置 [root@Apache_web-01 ~]# cd /application/apache/conf/ [root@Apache_web-01 conf]# grep -i documentroot httpd.conf # DocumentRoot: The directory out of which you will serve your DocumentRoot "/application/apache2.2.27/htdocs" --------------#===》配置的网站根目录位置 # This should be changed to whatever you set DocumentRoot to. # access content that does not live under the DocumentRoot. ##目录结构 [root@Apache_web-01 htdocs]# tree /application/apache/ /application/apache/ |-- bin | |-- ab ------------------#===》 Apache HTTP服务器性能测试工具,简单易用。(并发压力测试)。 | |-- apachectl ---------#===》 Apache 服务启动命令,重点掌握。 | |-- apxs --------------#===》 Apache扩展的一个编译工具,进行DSO编译模块(比如PHP)时候用到。 | |-- htcacheclean ----------#===》 清理磁盘缓冲区命令 | |-- htpasswd ---------------#===》 建立和更新基本认证文件,如配置Nginx等监控服务的时候会用到。 | |-- httpd ----------------#===》 Apache的控制程序命令,Apache执行的时候会调用httpd。 | `-- rotatelogs ------------#===》 Apache自带日志轮询命令,也可以使用cronolog替代之。 |-- build |-- cgi-bin |-- conf | |-- extra -----------------#===》 Apache额外的配置文件目录,目录中的文件,我们会经常访问修改。 | |-- httpd.conf -------------#===》 Apache的主配置文件,其中每一行的参数,我们都应该弄清楚。 | |-- magic | |-- mime.types | `-- original |-- error |-- htdocs -------------------#===》 Apache的站点目录(网页)。 | `-- index.html ------------#===》 Apache的默认首页文件,在实际环境中大家习惯使用(非必须)index.html、index.php index.jsp来做网站的首页文件,首页文件名字是在httpd.conf中定义好的。 |-- icons |-- include |-- lib |-- logs -------------------#===》 Apache默认的日志路径,包括错误日志以及访问日志。 | |-- access_log -----------#===》 Apache默认访问日志。使用tail -f access.log,可以时时观看网站用户访问情况信息。 | |-- cgisock.1121 | |-- error_log --------#===》 Apache错误日志文件,如果Apache出现启动故障,一定要看这个错误日志。 | `-- httpd.pid --------#===》 Apache的pid文件,httpd进程启动后,会把所有进程的ID号,写到此文件。 |-- man |-- manual `-- modules ------------------#===》 Apache的模块目录,比如php,memcache等模块编译后都存放在这里。 `-- httpd.exp 39 directories, 1287 files ####主配置文件 [root@Apache_web-01 conf]# grep -Ev "#|^$" httpd.conf >httpd.conf.ori [root@Apache_web-01 conf]# vim httpd.conf.ori 1 ServerRoot "/application/apache2.2.27" --------#===》 Apache服务的根目录 2 Listen 80 ------------------------#===》 Apache监听端口(对外的,外部访问使用的) 3 <IfModule !mpm_netware_module> ----------------------#===》 Apache模块 4 <IfModule !mpm_winnt_module> ----------------------#===》 Apache 模块 5 User daemon ---------------------------------#===》 Apache 默认用户 6 Group daemon ---------------------------------#===》 Apache 默认用户 7 </IfModule> 8 </IfModule> 9 ServerAdmin you@example.com -----------------------#===》 Apache管理员邮箱 10 DocumentRoot "/application/apache2.2.27/htdocs" -----#===》 Apache默认站点目录 11 <Directory /> -------------------------------------#===》 Apache权限控制:根目录拒绝其他人访问 12 Options FollowSymLinks----------------------------#===》 Apache设置可以带符号连接 13 AllowOverride None--------------------------------#===》 Apache禁止相关功能如:重载 14 Order deny,allow----------------------------------#===》 Apache拒绝任何人访问根目录 15 Deny from all--------------------------------------#===》Apache拒绝任何人访问根目录 16 </Directory> -------------------------------------#===》 Apache权限控制 17 <Directory "/application/apache2.2.27/htdocs">---------#===》新创建一个网站站点必须要增加这六行。 18 Options Indexes FollowSymLinks---------------------#===》(危险选项)没有首页,默认则展示目录结构(Apache优化选项),添加减号(-),或者干脆删掉,进行优化 19 AllowOverride None 20 Order allow,deny 21 Allow from all 22 </Directory> 23 <IfModule dir_module> -----------------------------#===》Apache指定访问的首页 24 DirectoryIndex index.html -----------------------#===》Apache指定访问的首页 25 </IfModule> -----------------------#===》Apache指定访问的首页 26 <FilesMatch "^\.ht"> -----------------------------#===》Apache文件匹配:对以\.ht开头的做什么样的处理 27 Order allow,deny -----------------------------#===》Apache文件匹配:对以\.ht开头的做什么样的处理 28 Deny from all -----------------------------#===》Apache文件匹配:对以\.ht开头的做什么样的处理 29 Satisfy All -----------------------------#===》Apache文件匹配:对以\.ht开头的做什么样的处理 30 </FilesMatch> -----------------------------#===》Apache文件匹配:对以\.ht开头的做什么样的处理 31 ErrorLog "logs/error_log" -------------------------#===》Apache错误日志的配置 32 LogLevel warn --------------------------------#===》Apache日志的级别警告配置 33 <IfModule log_config_module>--------------------------#===》Apache日志的类型 34 LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined 35 LogFormat "%h %l %u %t \"%r\" %>s %b" common 36 <IfModule logio_module> 37 LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio 38 </IfModule> ---------------------------------------#===》Apache访问日志的类型 39 CustomLog "logs/access_log" common 40 </IfModule> 41 <IfModule alias_module>-------------------------------#===》Apache支持cgi的配置 42 ScriptAlias /cgi-bin/ "/application/apache2.2.27/cgi-bin/" 43 </IfModule> 44 <IfModule cgid_module> 45 </IfModule> 46 <Directory "/application/apache2.2.27/cgi-bin"> 47 AllowOverride None 48 Options None 49 Order allow,deny 50 Allow from all 51 </Directory>-------------------------------------------#===》Apache支持cgi的配置:cgi动态语言,逐渐淘汰,工作中可以做删掉处理。 52 DefaultType text/plain -------------------------------#===》Apache缺省的类型。 53 <IfModule mime_module> --------------------------------#===》Apache添加的类型:压缩控制等 54 TypesConfig conf/mime.types 55 AddType application/x-compress .Z 56 AddType application/x-gzip .gz .tgz ----------------#===》Apache添加的类型:压缩控制等 57 </IfModule> 58 <IfModule ssl_module> 59 SSLRandomSeed startup builtin 60 SSLRandomSeed connect builtin 61 </IfModule> ########Apache第一个优化选项 优化目的:不对外展示目录结构,对外提供网站访问一定要禁止显示目录结构。危险性。 ①Apache安装目录进入conf配置文件目录并进行编辑。 ②搜索Index,找到Directory "/application/apache2.2.27/htdocs">选项。 ③修改Options Indexes FollowSymLinks为Options -Indexes FollowSymLinks。或者直接删除该行内容。 ④检查语法../bin/apachectl -t。 ⑤平滑重启../bin/apachectl graceful。 ########Apache第二个优化选项 在配置文件中找到ServerName标签,修改为ServerName 127.0.0.1:80,避免语法和平滑重启的错误提示。
6.6 Apache的扩展配置文件解析
[root@Apache_web-01 conf]# ll total 92 drwxr-xr-x 2 root root 4096 Dec 12 16:22 extra -rw-r--r-- 1 root root 13650 Dec 12 17:07 httpd.conf -rw-r--r-- 1 root root 12958 Dec 12 16:22 magic -rw-r--r-- 1 root root 53011 Dec 12 16:22 mime.types drwxr-xr-x 3 root root 4096 Dec 12 16:22 original [root@Apache_web-01 conf]# cd extra/ [root@Apache_web-01 conf]# ll 总用量 56 -rw-r--r--. 1 root root 2859 10月 4 21:44 httpd-autoindex.conf -rw-r--r--. 1 root root 1753 10月 4 21:44 httpd-dav.conf -rw-r--r--. 1 root root 2344 10月 4 21:44 httpd-default.conf(了解) -rw-r--r--. 1 root root 1103 10月 4 21:44 httpd-info.conf -rw-r--r--. 1 root root 5078 10月 4 21:44 httpd-languages.conf -rw-r--r--. 1 root root 949 10月 4 21:44 httpd-manual.conf -rw-r--r--. 1 root root 3789 10月 4 21:44 httpd-mpm.conf(重点) -rw-r--r--. 1 root root 2207 10月 4 21:44 httpd-multilang-errordoc.conf -rw-r--r--. 1 root root 11530 10月 4 21:44 httpd-ssl.conf -rw-r--r--. 1 root root 817 10月 4 21:44 httpd-userdir.conf -rw-r--r--. 1 root root 1507 10月 4 21:44 httpd-vhosts.conf(重点) ##httpd-vhosts.conf配置文件(配置网站大多在此配置) [root@Apache_web-01 extra]# cat httpd-vhosts.conf | egrep -v "#|^$" NameVirtualHost *:80 ------------------------------#===》Apache基于域名的虚拟主机(所有本机80端口的IP地址) <VirtualHost *:80>-------------------------------------#===》Apache基于多个域名,多个网站的配置文件(可复制增删) ServerAdmin webmaster@dummy-host.example.com DocumentRoot "/application/apache2.2.27/docs/dummy-host.example.com" ServerName dummy-host.example.com ServerAlias www.dummy-host.example.com ErrorLog "logs/dummy-host.example.com-error_log" CustomLog "logs/dummy-host.example.com-access_log" common </VirtualHost> <VirtualHost *:80>-------------------------------------#===》Apache基于多个域名,多个网站的配置文件(可复制增删) ServerAdmin webmaster@dummy-host2.example.com DocumentRoot "/application/apache2.2.27/docs/dummy-host2.example.com" ServerName dummy-host2.example.com ErrorLog "logs/dummy-host2.example.com-error_log" CustomLog "logs/dummy-host2.example.com-access_log" common </VirtualHost> ##httpd-mpm.conf配置文件 [root@Apache_web-01 extra]# cat httpd-mpm.conf | egrep -v "#|^$" <IfModule !mpm_netware_module> ----------------------#===》Apache的pid文件 PidFile "logs/httpd.pid" </IfModule> -------------------------------#===》Apache的pid文件 <IfModule !mpm_winnt_module>----------------------------#===》Apache锁文件 <IfModule !mpm_netware_module> LockFile "logs/accept.lock" </IfModule>---------------------------------------------#===》Apache锁文件 </IfModule> <IfModule mpm_prefork_module>---------------------------#===》Apache模式:prefork StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxClients 150 ----------------------------#===》默认并发150 MaxRequestsPerChild 0 </IfModule>----------------------------------------------#===》Apache模式:prefork 最常见的就是worker和prefork两种模式 ##httpd-default.conf配置文件 [root@Apache_web-01 extra]# cat httpd-default.conf | egrep -v "#|^$" Timeout 300 ------------------------------#===》Apache网站300秒链接超时 KeepAlive On ------------------------------#===》Apache网站链接状态保持 MaxKeepAliveRequests 100 ------------------------------#===》Apache网站最大永久链接接受数量 KeepAliveTimeout 5 ----------------------------------#===》Apache网站同一个连接上面等待下一个请求的时间 UseCanonicalName Off AccessFileName .htaccess -------------------------------#===》Apache网站 程序员使用,伪静态语法,需要给与权限,开发用的较多 ServerTokens Full --------------------------------#===》Apache网站隐藏apache版本。(默认是展示的) ServerSignature On ---------------------------------#===》Apache网站隐藏apache版本。(默认是展示的) HostnameLookups Off ##注意:一般来讲我们不需要开发参数配置运维的配置文件。
第七章 Apache虚拟主机配置
7.1 虚拟主机分类及应对生产场景
①虚拟主机定义:简单说一个http web服务器配置多个网站,需要虚拟主机。部署多个站点,每个站点,希望用不同的域名和站点目录,或不同的端口、不同的IP,需要配置虚拟主机。
②虚拟主机分类:基于域名的虚拟主机(重点)、基于端口的虚拟主机,基于IP的虚拟主机。
7.2 基于域名的虚拟主机配置步骤
##########配置步骤:
①需求:同在一台主机,配置三个站点。如下:
域名www.etiantian.org 定义对应站点目录:/data/html/www
域名blog.etiantian.org 定义对应站点目录:/data/html/blog
域名bbs.etiantian.org 定义对应站点目录:/data/html/bbs
②在Apache安装目录下的extra目录下,批量创建站点对应的目录,并查看确认。
③批量写入首页文件index.html并且根据站点目录创建定义首页名称的站点http。
④调整配置文件httpd-vhosts.conf,并在结尾进行编辑。
⑤定义管理员邮箱:ServerAdmin 569135810@qq.com
⑥定义三个站点主页地址、日志记录地址、错误日志地址,注意主页地址一般需要进行定义别名。
⑦编辑主配置文件,搜索vhost将扩展配置文件前的注释去掉,进而引用。
⑧检查Apache配置文件语法。然后平滑重启Apache服务。
⑨修改windows本地host文件,本地域名解析。地址:C:\Windows\System32\drivers\etc
⑩在windows本地cmd命令行中进行ping www.etiantian.org(blog/bbs)测试,正确返回配置的服务器IP192.168.109.158地址,则说明本地的host已经做好了。
⑾修改祝配置文件,添加一个新的站点,必须要增加<Directory "/data/html">里面的六行内容,可以复制实现。并且修改-Indexes,或者直接删掉该词。
⑿再次检查语法,平滑重启、之后在浏览器中输入配置站点地址,进行访问测试。表示配置成功完成。
###注意点,安全优化以及在主配置文件中,那么就必须要有这么一段内容。
<Directory "/data/html"> Options -Indexes FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory>
7.3 基于域名的虚拟主机的配置实践操作
[root@Apache_web-01 extra]# mkdir /data/html/{www,blog,bbs,wiki} -p [root@Apache_web-01 extra]# touch /data/html/{www,blog,bbs,wiki}/index.html [root@Apache_web-01 extra]# for name in www blog bbs wiki;do echo "http://$name.etiantian.org" >/data/html/$name/index.html;done [root@Apache_web-01 extra]# for name in www blog bbs wiki;do cat /data/html/$name/index.html;done http://www.etiantian.org http://blog.etiantian.org http://bbs.etiantian.org http://wiki.etiantian.org 1、############################# 编辑httpd-vhosts.conf扩展配置文内容############## [root@Apache_web-01 conf]# vim extra/httpd-vhosts.conf NameVirtualHost *:80 #################### www ####################### <VirtualHost *:80> ServerAdmin 569135810@qq.com DocumentRoot "/data/html/www" ServerName www.etiantian.org ServerAlias etiantian.org ErrorLog "logs/www-error_log" CustomLog "logs/www-access_log" common </VirtualHost> #################### blog ##################### <VirtualHost *:80> ServerAdmin 569135810@qq.com DocumentRoot "/data/html/bbs" ServerName bbs.etiantian.org ErrorLog "logs/blog-error_log" CustomLog "logs/blog-access_log" common </VirtualHost> #################### bbs ##################### <VirtualHost *:80> ServerAdmin 569135810@qq.com DocumentRoot "/data/html/bbs" ServerName bbs.etiantian.org ErrorLog "logs/bbs-error_log" CustomLog "logs/bbs-access_log" common </VirtualHost> #################### wiki ##################### <VirtualHost *:80> ServerAdmin 569135810@qq.com DocumentRoot "/data/html/wiki" ServerName wiki.etiantian.org ErrorLog "logs/bbs-error_log" CustomLog "logs/bbs-access_log" common </VirtualHost> 2、####################编辑主配置文件httpd.conf########################### ##编辑配置文件内容 ##编辑主配置文件打开两个文件。去掉注释。 # Server-pool management (MPM specific) Include conf/extra/httpd-mpm.conf # Virtual hosts Include conf/extra/httpd-vhosts.conf 3、####################编辑主配置文件####################################(优化点) <Directory "/data/html"> Options -Indexes FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory> ##修改主页地址为自己设定的web站点目录DocumentRoot 。
7.4 Apache其他相关优化设置
3.5.1 通过脚本分析Apache日志 #执行统计命令: awk ‘{print $1}’ www-access_2014-10-06log |sort|uniq -c -k1|head -10查看具体频率信息。 也可以使用下面命令进行统计: awk ‘{++S[$1]} END {for (key in S) print S[key],key}’www-access_2014-10-06log |sort -rn -k1|head -10 3.5.2 隐藏版本信息(注意实在编译安装之前进行的修改) ##编辑源文件中ap_release.h文件修改为: [root@TS logs]# cat /home/ts/tools/httpd-2.2.27/include/ap_release.h #define AP_SERVER_BASEVENDOR "Apache Software Foundation" #define AP_SERVER_BASEPROJECT "Apache HTTP Server" #define AP_SERVER_BASEPRODUCT "Apache" #define AP_SERVER_MAJORVERSION_NUMBER 2 #define AP_SERVER_MINORVERSION_NUMBER 2 #define AP_SERVER_PATCHLEVEL_NUMBER 27 #define AP_SERVER_DEVBUILD_BOOLEAN 0 ##修改平台信息: [root@TS logs]# cat /home/ts/tools/httpd-2.2.27/os/unix/os.h #ifndef APACHE_OS_H #define APACHE_OS_H #include "apr.h" #include "ap_config.h" #ifndef PLATFORM #define PLATFORM "Unix" #endif ##把其中的unix修改其他系统版本等等 ##修改版本号: [root@TS logs]# curl -I 192.168.109.128 HTTP/1.1 200 OK Date: Mon, 06 Oct 2014 10:03:57 GMT Server: Apache/2.2.27 (Unix) DAV/2 Last-Modified: Sun, 05 Oct 2014 09:02:07 GMT ETag: "1d6d-19-504a9387ee90f" Accept-Ranges: bytes Content-Length: 25 Content-Type: text/html ##漏洞和bug一般都是和版本号相关的。所以我们可以把上述红色字体隐藏: [root@TS logs]# vi /application/apache/conf/extra/httpd-default.conf ###到文件结尾将ServerSignature on 修改为ServerSignature off,另外ServerTokens Full改为ServerTokens Prod。 ##打开主配置文件 搜索default,将选项前的注释去掉,然后平滑重启。 # Various default settings Include conf/extra/httpd-default.conf [root@TS logs]# /application/apache/bin/apachectl graceful ##结果如下: [root@TS logs]# curl -I 192.168.109.128 HTTP/1.1 200 OK Date: Mon, 06 Oct 2014 10:17:34 GMT Server: Apache Last-Modified: Sun, 05 Oct 2014 09:02:07 GMT ETag: "1d6d-19-504a9387ee90f" Accept-Ranges: bytes Content-Length: 25 Content-Type: text/html ###注意事项:去版本号(安全点): [root@TS logs]# grep "^Server" /application/apache/conf/extra/httpd-default.conf ServerTokens Prod ServerSignature off
第八章 编译安装PHP软件整合LAMP
8.1 PHP部署相关说明
①linux安装的库原作用:linux的核心是内核,内核无法直接和应用程序打交道,应用程序都是通过调用一些库然后跟系统调用打交道的。库是应用程序必不可少的。
②使用PHP软件使用动态web服务。达到可以存储动态的交互的等内容进入数据库。
③Apache配合PHP服务是使用模块的方式进行配合的。而Nginx是使用进程的模式配合的。
④linux安装的库原作用:linux的核心是内核,内核无法直接和应用程序打交道,应用程序都是通过调用一些库然后跟系统调用打交道的。库是应用程序必不可少的。
8.2 LAMP架构中PHP安装步骤流程
①必须首先安装所需要的安装插件,避免安装失败。
yum install zlib libxml libjpeg freetype libpng gd curl libiconv zlib-devel libxml2-devel libjpeg-devel freetype-devel libpng-devel gd-devel curl-devel opensshl-devel libxslt-devel -y
②编译安装四个专用的PHP支持插件
libiconv-1.14
libmcrypt-2.5.8
mhash-0.9.9.9
mcrypt-2.6.8
③编译安装PHP。编译参数:
./configure --prefix=/application/php5.3.27 --with-apxs2=/application/apache/bin/apxs --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --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 --with-mcrypt --with-mhash
8.3 PHP所需插件的编译安装
[root@Apache_web-01 ~]# cd /home/tslove/toos/ [root@Apache_web-01 toos]# ll total 22008 drwxr-xr-x 12 tslove tslove 4096 Dec 12 16:22 httpd-2.2.27 -rw-r--r-- 1 root root 7519677 Mar 19 2014 httpd-2.2.27.tar.gz -rw-r--r-- 1 root root 15008639 Jul 11 2013 php-5.3.27.tar.gz [root@Apache_web-01 toos]# yum install zlib libxml libjpeg freetype libpng gd curl libiconv zlib-devel libxml2-devel libjpeg-devel freetype-devel libpng-devel gd-devel curl-devel openssl-devel libxslt-devel -y [root@Apache_web-01 toos]# ll total 29556 drwxr-xr-x 12 tslove tslove 4096 Dec 12 16:22 httpd-2.2.27 -rw-r--r-- 1 root root 7519677 Mar 19 2014 httpd-2.2.27.tar.gz -rw-r--r-- 1 root root 4984397 Oct 7 06:13 libiconv-1.14.tar.gz -rw-r--r-- 1 root root 1335178 Feb 19 2007 libmcrypt-2.5.8.tar.gz -rw-r--r-- 1 root root 471915 Nov 22 2008 mcrypt-2.6.8.tar.gz -rw-r--r-- 1 root root 931437 Dec 8 2008 mhash-0.9.9.9.tar.gz -rw-r--r-- 1 root root 15008639 Jul 11 2013 php-5.3.27.tar.gz [root@Apache_web-01 toos]#tar zxf libiconv-1.14.tar.gz cd libiconv-1.14 ./configure --prefix=/usr/local/libiconv make make install cd ../ [root@Apache_web-01 libiconv-1.14]# cd ../ [root@Apache_web-01 libiconv-1.14]# tar zxf libmcrypt-2.5.8.tar.gz cd libmcrypt-2.5.8 ./configure make make install sleep 2 /sbin/ldconfig cd libltdl/ ./configure --enable-ltdl-install make make install cd ../../ [root@Apache_web-01 libiconv-1.14]# tar zxf mhash-0.9.9.9.tar.gz cd mhash-0.9.9.9/ ./configure make make install sleep 2 cd ../ rm -f /usr/lib64/libmcrypt.* rm -f /usr/lib64/libmhash* ln -s /usr/local/lib64/libmcrypt.la /usr/lib64/libmcrypt.la ln -s /usr/local/lib64/libmcrypt.so /usr/lib64/libmcrypt.so ln -s /usr/local/lib64/libmcrypt.so.4 /usr/lib64/libmcrypt.so.4 ln -s /usr/local/lib64/libmcrypt.so.4.4.8 /usr/lib64/libmcrypt.so.4.4.8 ln -s /usr/local/lib64/libmhash.a /usr/lib64/libmhash.a ln -s /usr/local/lib64/libmhash.la /usr/lib64/libmhash.la ln -s /usr/local/lib64/libmhash.so /usr/lib64/libmhash.so ln -s /usr/local/lib64/libmhash.so.2 /usr/lib64/libmhash.so.2 ln -s /usr/local/lib64/libmhash.so.2.0.1 /usr/lib64/libmhash.so.2.0.1 ln -s /usr/local/bin/libmcrypt-config /usr/bin/libmcrypt-config [root@Apache_web-01 libiconv-1.14]#tar zxf mcrypt-2.6.8.tar.gz cd mcrypt-2.6.8/ /sbin/ldconfig ./configure LD_LIBRARY_PATH=/usr/local/lib make make install cd ../ sleep 2
8.4 PHP软件的编译安装
[root@Apache_web-01 toos]# tar xf php-5.3.27.tar.gz [root@Apache_web-01 toos]# cd php-5.3.27 [root@Apache_web-01 toos]# yum install openssl-devel -y [root@Apache_web-01 toos]# ./configure --prefix=/application/php5.3.27 --with-apxs2=/application/apache/bin/apxs --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --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 --with-mcrypt --with-mhash ###出现以下界面表示编译完成 +--------------------------------------------------------------------+ | License: | | This software is subject to the PHP License, available in this | | distribution in the file LICENSE. By continuing this installation | | process, you are bound by the terms of this license agreement. | | If you do not agree with the terms of this license, you must abort | | the installation process at this point. | +--------------------------------------------------------------------+ [root@Apache_web-01 php-5.3.27]# make && make install [root@Apache_web-01 php-5.3.27]# ln -s /application/php5.3.27/ /application/php [root@Apache_web-01 php-5.3.27]# ll /application/php/
###WEB站点的目录创建授权等步骤同Nginx的相关设置。
8.5增删改差记录(待补充)
《本节结束》
注:本人水平有限,如有需改进之处,望不吝指导建议,谢谢!
①②③④⑤⑥⑦⑧⑨⑩
参考文章:
linux运维老男孩培训老师博客
http://oldboy.blog.51cto.com/all/2561410
本文出自 “燁未央_Estelle” 博客,请务必保留此出处http://tslove.blog.51cto.com/9115838/1592742
Linux服务器集群架构部署搭建(四)WEB服务器LNMP/LAMP搭建部署及站点产品安装(1)