首页 > 代码库 > Linux服务器集群架构部署搭建(四)WEB服务器LNMP/LAMP搭建部署及站点产品安装(1)

Linux服务器集群架构部署搭建(四)WEB服务器LNMP/LAMP搭建部署及站点产品安装(1)

命运是大海,当你能够畅游时,你就要纵情游向你的所爱,因为你不知道狂流什么会到来,卷走一切希望与梦想。

作者:燁未央_Estelle
声明:测试学习,不足之处,欢迎指正。

第一章 集群WEB服务器LNMP生产应用

1.1 Nginx的应用场合:根据功能来进行应用

①静态服务器(图片,视频服务)国内使用的只有两款,另一个是lighttpd。百度贴吧、豆瓣。htmljscssflv等。

②动态服务:nginx+fastcgi的方式运行phpjsp。动态的并发很少(根据优化达到500-1500),静态的并发可以大达到好几万。另外mysql的并发也是300-1500.

动态请求的瓶颈在于PHPMysql的承受并发能力(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也是可以的。

②动态业务:采用nginxapache均可以。

③静态、动态混合业务:nginx或者apache不要多选,要单选。

④动态业务可以由前端代理(haproxy),根据页面元素类型,向后转发相应的服务器进行处理。如果并发不是很大:又对apache很熟悉,采用apache也可以的。apache2.4功能也很强大的并发链接数也有所增加,见后面的压力测试。

⑤提示:nginxwebapachelighttpd)、反向代理(haproxylvs nat)及缓存服务器(squid)也非常不错的。

##最终建议:如果没有特别的需求,对外的业务使用nginx,对内的业务使用可以选择apache(流量不是很大可以选择yum httpd mysql-server php安装。)

第二章 LNMP架构搭建原理及注意事项

2.1 LANP架构的原理、及相关应用

LNMP组合(Linux+Nginx+Mysql+PHP),和LAMP的区别就是NginxApache的区别

LNMP架构原理:用户访问Nginx80端口)对应的PHPPHPFCGI形式,9000端口),通过在配置文件中做一个设置(扩展名是PHP的话,通过一个设置),然后把请求提交到PHP9000端口所在机器上面。用户访问Nginx,默认都是Nginx来解析,可以设置什么样的扩展名给PHP来处理(phpFCGI来解析的)。

Apche是模块配合PHP.Nginx是服务(PHPFCGI9000端口)来配合PHP的。用户====Nginx====PHP====>MySQL

Nnginx本身是一款静态(只能解析htmljscs 图片等)的www软件,特点是(静态小文文件)高并发(同时处理的连接数)、占用的资源少(网上测试:3W并发,10个线程,只消耗150M

⑤用户访问网站,如果是静态的,直接有CDN进行返回,如果是动态的,由CDN后端的负载均衡器(LB)进行分发到相关指定的WEB服务器,其中web服务器根据分类(帖子、博文)寻找数据库或者(图片、附件就先找CDN,如果CDN没有就访问负载均衡器,负载均衡器会分发到静态服务器上寻找)存储(注意弃用NFS方案)。一般的大型企业,动静分离的,即分为动态服务器、静态服务器。而静态服务器一般就是用Nginx,静态服务器上面不配php 也不配数据库。我们加一个缓存在负载均衡和静态服务器之间,这样往前推,减少Nginx和后方压力。大公司一般会用到CDN(内容更分发网络)。CDN在全国各地都有cache。本地缓存就近访问。并且不会跨线路,网通访问网通,电信访问电信。这样才是一个有效率的网站架构

注意:AMP架构原理:前端就是一个Apche,负责处理静态请求,动态请求则转交给PHP处理。ApachePHP的配合是通过模块嵌入到Apache配置文件中的式实现的,帖子博文就需要找后端的Mysql。来实现请求响应。用户====Apache====PHP====>MySQL

 

2.2 LNMP架构搭建注意事项

①安装nginx软件之前需要安装一个PcrePcre兼容正则表达式),是为了使得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的客户端。

⑨免安装mysqlPHP安装需要将编译参数中的指定mysql路径--with-mysql=/application/mysql \参数换成下面三个编译参数:

--with-mysql=mysqlnd \

--with-mysql=mysqlnd \

--with-pdo-mysql=mysqlnd \

⑩期末架构搭建的软件版本选择:

nginxnginx-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

本地cmdping 站点地址 正常返回IP

浏览器中打开主页地址,正常返回设置内容。

基于端口的虚拟主机设置:修改配置文件中的端口为800080018002.就是格局端口来区分访问。此时访问不看域名。

基于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

本地cmdping 状态信息域名,成功返回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-fpmnginx的正常启动以及语法检查无误。

⑦浏览器输入域名,后面加上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服务器(能够解析静态的,以及aspaspx等动态网页)。

tomcat:中小企业web服务,互联网java容器主流(jsp.do)。

resin:大型动态web服务,互联网java容器主流(jsp.do比如百度使用)。

phpfcgi):php程序的解析容器。

配合apche,不是守护进程,不能启动服务。,php并不是守护进程而是模块(module)的方式,一般表示形式mod_php5.so

配合nginxlighttpdphp是守护进程模式。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引擎运行PHPPerlPython等程序,LAMP被称之为经典组合。

c.使用Apache结合Tomcat/Resin运行JSPjava等程序,称为中小企业的首选。

d.使用Apache做代理、负载均衡、rewrite规则过滤等等。

##案例:

案例1apache不记录图片的日志

答:因为统计日志PV时一个页面才算一个PV,而图片,JSCSS等只是图片的元素,如果记录在日志里,然后按日志行计算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 rotatelogshttp://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.orgblog/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)