Loading

16、lamp的搭建


搭建web02服务器作为web01的负载均衡服务器:

httpd和nginx配置比较相似,也有虚拟主机,一个http服务需要配置多个站点,基于ip(基本用不到)、端口(内部网站)、域名(外部网站);

yum安装的http只是把把软件做了一些优化,集中了配置:

16.1、http软件的安装:

1、下载httpd软件(web02):

[root@web02 ~]# mkdir -p tools

[root@web02 ~]# mkdir -p /application

[root@web02 ~]# cd tools

[root@web02 tools]# wget http://archive.apache.org/dist/httpd/httpd-2.2.31.tar.gz

[root@web02 httpd-2.2.31]# tar -xzvf httpd-2.2.31.tar.gz

2、查看安装和阅读文档:

[root@web02 httpd-2.2.31]# less README

[root@web02 httpd-2.2.31]# less INSTALL

[root@web02 httpd-2.2.31]# ./configure --help#查看软件的帮助文档;

3、安装扩展库:

(1)php程序运行时会调用一些诸如zlib,gd等函数库,这些lib库也不是必须安装的,默认情况下系统是没有安装的,

目前的企业环境下一般都需要安装。否则,PHP程序运行有问题,例如验证码无法显示等。

[root@web01 nginx]#yum install -y zlib-devel libxml2-devel libjpeg-turbo-devel

[root@web01 nginx]#yum install -y freetype-devel libpng-devel gd-devel libcurl-devel libxslt-devel

[root@web01 nginx]#rpm -qa zlib-devel libxml2-devel libjpeg-turbo-devel

zlib-devel-1.2.3-29.el6.x86_64

libjpeg-turbo-devel-1.2.1-3.el6_5.x86_64

libxml2-devel-2.7.6-21.el6_8.1.x86_64

[root@web01 nginx]#rpm -qa freetype-devel libpng-devel gd-devel libcurl-devel libxslt-devel

libxslt-devel-1.1.26-2.el6_3.1.x86_64

libpng-devel-1.2.49-2.el6_7.x86_64

freetype-devel-2.3.11-17.el6.x86_64

gd-devel-2.0.35-11.el6.x86_64

libcurl-devel-7.19.7-53.el6_9.x86_64

(2)其中libiconv-devle包用yum安装不了(手工安装):

[root@web01 tools]# wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz # (源码包)

[root@web01 tools]# tar -xzvf libiconv-1.14.tar.gz

[root@web01 libiconv-1.14]# ./configure --prefix=/usr/local/libiconv/

[root@web01 libiconv-1.14]# make

[root@web01 libiconv-1.14]# make install

(3)安装动态加载模块库(需要第三方的epel源):

[root@web01 tools]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo

[root@web01 application]# yum install -y libmcrypt-devel #这是一个使用动态加载的模块化的库,这个不是必须的库,在开发的时候需要用到;

[root@web01 application]# rpm -qa libmcrypt-devel

libmcrypt-devel-2.5.8-9.el6.x86_64

(4)安装加密扩展库:

[root@web01 application]# yum install -y mhash mcrypt

[root@web01 application]# rpm -qa mhash mcrypt

mcrypt-2.6.8-10.el6.x86_64

mhash-0.9.9.9-3.el6.x86_64

(5)安装openssl(安全套接层协议,安全通信,避免窃听,同时确认另一端连接者的身份。这个包广泛被应用在互联网的网页服务器上):

[root@web02 php-5.5.32]# yum install openssl openssl-devel

[root@web02 php-5.5.32]# rpm -qa openssl openssl-devel

openssl-devel-1.0.1e-57.el6.x86_64

openssl-1.0.1e-57.el6.x86_64

4、配置参数:

[root@web02 httpd-2.2.31]# ./configure --prefix=/application/apache-2.2.31 --enable-deflate --enable-expires --enable-headers \
--enable-modules=most --enable-so --with-mpm=prefork --enable-rewrite #参数配置,注意httpd-2.4版本需要安装相应的api;

(1)参数介绍:

--prefix=/application/apache-2.2.31#安装路径

--enable-deflate #激活数据压缩的功能

--enable-expires #激活客户端缓存的功能

--enable-headers #激活headers

--enable-modules=most #激活模块

--enable-so # 打开so模块

--with-mpm=prefork # 激活模块功能 prefork

--enable-rewrite #激活重定向功能

[root@web02 httpd-2.2.31]# echo $? #查看编译是否存在问题;

0

5、编译:

[root@web02 httpd-2.2.31]# make #编译的过程,时间长,比较消耗cpu的计算

[root@web02 httpd-2.2.31]# echo $?

0

6、安装:

[root@web02 httpd-2.2.31]# make install #安装,拷贝的过程

[root@web02 httpd-2.2.31]# echo $?

0

7、创建软连接:

[root@web02 httpd-2.2.31]# cd /application/

[root@web02 application]# ln -s apache-2.2.31/ apache #创建软连接

8、appache配置文件参数配置:

[root@web02 apache]# cd htdocs/ #apache的站点目录

[root@web02 htdocs]# ls

index.html

[root@web02 htdocs]# mkdir php #创建php站点目录

[root@web02 htdocs]# cd ..

[root@web02 apache]# cd conf/

[root@web02 conf]# ls

extra httpd.conf magic mime.types original #配置文件是httpd.conf, extra目录是包含配置文件的目录

[root@web02 conf]# vim httpd.conf +98 +145 +396 +133 +168 +67

98行:ServerName 127.0.0.1:80 #打开该配置,并修改参数,如果不修改,检查语法时会报,修改主机名

“httpd: Could not reliably determine the server's fully qualified domain name, using 172.16.1.7 for ServerName"的错误;

145 行:Options Indexes FollowSymLinks #优化,取消列目录的功能,如果有报错页面,不会显示列表;

396 行:Include conf/extra/httpd-vhosts.conf #把396行注释的内容打开,表示打开虚拟站点的配置文件 ;

133行:DocumentRoot "/application/apache/htdocs" #配置的新的站点目录;

<Directory "/application/apache/htdocs">

#DocumentRoot指的是apache放web文件的地方,Directory是控制访问服务器的一个固定区域及控制禁止访问服务器的主机(即权限)。

168行:apache的首页文件:

<IfModule dir_module>

DirectoryIndex index.php index.html

</IfModule>

67行:apache运行时的用户和用户组;

User nginx

Group nginx

说明:http默认自带站点,如果添加virtuhost配置,以该配置优先,包含配置逻辑上和父文在同一个配置文件中;

[root@web02 conf]# vim extra/httpd-vhosts.conf #编辑httpd-vhosts.conf配置文件

<VirtualHost *:80> #虚拟站点,类似于nginx中的server标签,一个标签代表一个虚拟主机站点;监听所有的网卡ip,监听的端口号是80

#如果是基于端口号的访问,需在httpd.conf配置文件中添加端口号列如:Listen 8080,详细配置,可见

#https://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_linux_016_virtualhost.html;

#ServerAdmin webmaster@dummy-host.example.com #管理员邮箱地址

DocumentRoot "/application/apache/htdocs" #站点目录,类似于nginx中的 html/php/目录

ServerName www.php1.com #站点域名

#ServerAlias www.dummy-host.example.com #站点别名

ErrorLog "logs/www.php.com_error.log" #错误日志,在apache的站点目录之下

CustomLog "logs/www.php.com-access_log" common #访问日志,在apache的站点目录之下

</VirtualHost>

9、启动apache服务:

[root@web02 conf]# cd ..

[root@web02 apache]# bin/apachectl -t #检查语法是否正确

Syntax OK

[root@web02 apache]# bin/apachectl start #启动服务;bin/apachectl graceful #优雅重启;

[root@web02 apache]# netstat -tunlp | grep httpd

tcp 0 0 :::80 :::* LISTEN 64758/httpd

[root@web02 apache]# echo "welcome access httpd-apache" >htdocs/php/index.html#在站点目录下面添加首页文件

[root@web02 apache] echo '/appllication/php/bin/apachectl start' >>/etc/rc.local #加入到开机自启动中;

10、apache常见的两种工作模式:

线程:

(1)轻型实体。

(2) 独立调度和分派的基本单位。

(3) 可并发执行。

(4) 共享进程资源。

进程:

(1) 进程是程序的一次执行。

(2) 进程是一个程序及其数据在处理机上顺序执行时所发生的活动。

(3) 进程是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。

在引入了进程实体的概念后,我们可以把传统OS中的进程定义为:“进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位”。

(1)worker模式:

线程模式、占用资源少、稳定性略差、并发大;

出于稳定性和安全性考虑,不建议更换apache2的运行方式,使用系统默认prefork即可。

另外很多php模块不能工作在worker模式下,例如redhat linux自带的php也不能支持线程安全。所以最好不要切换工作模式。

如果想用work模式,还不如使用Nginx;

(2)prefork模式:

进程模式、占用资源多、稳定、并发一般;

(3)如何改变apache的工作模式:

[root@web02 conf]# pwd

/application/apache/conf

[root@web02 conf]# vim httpd.conf +381

Include conf/extra/httpd-mpm.conf #打开该配置文件,默认是进程模式;

[root@web02 conf]# cd extra

[root@web02 extra]# vim httpd-mpm.conf

<IfModule mpm_prefork_module> #进程模式;

ServerLimit 256

StartServers 5

MinSpareServers 5

MaxSpareServers 10

MaxClients 256

MaxRequestsPerChild 5000

</IfModule>


#<IfModule mpm_worker_module> #线程模式;

#StartServers 5

#ServerLimit 1500

#MaxClients 1500

#MinSpareThreads 25

#MaxSpareThreads 75

#ThreadsPerChild 25 #每个进程有多少线程数

#MaxRequestsPerChild 5000

#</IfModule>

(4)apache工作模式参数详解:

1)ServerLimit

默认的MaxClient最大是256个线程,如果想设置更大的MaxClient值,就的设置这个ServerLimit参数。20000是ServerLimit

这个参数的最大值。如果需要更大,则必须编译apache,此前都是不需要重新编译Apache。生效前提:必须放在其他指令的前面。

如果这个参数设置的值很高,那么就会申请很多的无用共享内存。如果ServerLimit和MaxClients都设置成一个很高的值,超过了

系统的处理范围,那么Apache很可能不会启动或者系统变得不稳定。

2)StartServers

指定服务器启动时建立的子进程数量。因为进程的数量是根据负载来动态控制得,所以这个参数可以不用修改。prefork默认为5。

3)MinSpareServers

指定空闲子进程的最小数量,默认为5。如果当前空闲子进程数少于MinSpareServers ,那么Apache将以最大每秒一个的速度产

生新的子进程。此参数不要设的太大。

4)MaxSpareServers

设置空闲子进程的最大数量,默认为10。如果当前有超过MaxSpareServers数量的空闲子进程,那么父进程将杀死多余的子进程。

此参数不要设的太大。如果你将该指令的值设置为比MinSpareServers小,Apache将会自动将其修改成"MinSpareServers+1"。

5)MaxClients

限定同一时间客户端最大接入请求的数量(单个进程并发线程数),默认为256。任何超过MaxClients限制的请求都将进入等候队列,一旦一个链接被释放,队列中的请求将得到服务。要增大这个值,你必须同时增大ServerLimit。

6)MaxRequestsPerChild

每个子进程在其生存期内允许处理的最大请求数量,默认为10000.到达MaxRequestsPerChild的限制后,子进程将会结束。如果 MaxRequestsPerChild为"0",子进程将永远不会结束。将MaxRequestsPerChild设置成非零值有两个好处:

可以防止(偶然的)内存泄漏无限进行,从而耗尽内存。

给进程一个有限寿命,从而有助于当服务器负载减轻的时候减少活动进程的数量。

11、在windows主机hosts文件中添加域名解析记录:

172.16.1.7 www.php1.com

在浏览器中测试:

16.2、安装php(web02,同web01安装方式相同):

1、--with-apxs2=/application/apache/bin/apxs

在apache环境中配置php时需要用到此参数,把php以模块的形式嵌套在apache中,因为apache是以模块的形式配置的,

而nginx采用的fastCGI的方式实现;

2、配置参数,编译执行:

./configure \

--prefix=/application/php5.5.32 \

--with-apxs2=/application/apache/bin/apxs \

--with-mysql=mysqlnd \

--with-pdo-mysql=mysqlnd \

--with-iconv-dir=/usr/local/libiconv/ \

--with-freetype-dir \

--with-jpeg-dir \

--with-png-dir \

--with-zlib \

--with-libxml-dir=/usr/ \

--enable-xml \

--disable-rpath \

--enable-bcmath \

--enable-shmop \

--enable-sysvsem \

--enable-inline-optimization \

--with-curl \

--enable-mbregex \

--enable-mbstring \

--with-mcrypt \

--with-gd \

--with-openssl \

--with-mhash \

--enable-gd-native-ttf \

--enable-pcntl \

--enable-sockets \

--with-xmlrpc \

--enable-soap \

--enable-short-tags \

--enable-static \

--with-xsl \

--enable-ftp

[root@web02 apache] make && make install

[root@web02 application]# cd /root/tools/php-5.5.32

[root@web02 php-5.5.32]# ls -l php.ini*

-rw-r--r-- 1 1001 1001 69236 2月 2 2016 php.ini-development #开发环境的配置文件

-rw-r--r-- 1 1001 1001 69266 2月 2 2016 php.ini-production #生产环境的配置文件

[root@web02 php-5.5.32]# cp php.ini-production /application/php/lib/php.ini #php配置文件默认路径

[root@web02 apache]# vim conf/httpd.conf +54 #安装php完成后会出现如下一行,如果没有需要进行手动添加

54 LoadModule php5_module modules/libphp5.so

[root@web02 apache]# vim conf/httpd.conf +311 #在apache中的配置文件中添加如下两行,来支持php的解析

AddType application/x-httpd-php .php .phtml

AddType application/x-httpd-php-source .phps

[root@web02 apache]# vim conf/httpd.conf +168 #添加php的首页文件;

<IfModule dir_module>

DirectoryIndex index.php index.html

</IfModule>

[root@web02 apache]# useradd -Ms -u889 nginx /sbin/nologin #添加一个虚拟用户,和nginx和nfs的虚拟用户保持一致;

[root@web02 apache]# vim conf/httpd.conf +67 #配置appach的虚拟用户

User nginx

Group nginx

[root@web02 apache]# bin/apachectl -t

Syntax OK

3、测试php是否正常:

[root@web02 apache]# cat htdocs/php/test_php.php

<?php

phpinfo();

?>

测试页面:

16.3、数据库(使用web01的db01服务器wordpress数据库)

1、测试数据库连接是否正常:

<?php

$link_id=mysql_connect('172.16.1.51','wordpress','123456') or mysql_error();

if($link_id){

echo "mysql successful by wordpress";

}

else{

echo mysql_error();

}

?>

2、测试页面:

16.4、安装wordpress博客软件(同web01服务器上安装wordpress类似,也可以将web01的wordpress复制过来后直接使用):

[root@web02 apache]# cd ~/tools/

[root@web02 tools]# rz -y

rz waiting to receive.

Starting zmodem transfer. Press Ctrl+C to cancel.

Transferring wordpress-4.5.1-zh_CN.tar.gz...

100% 7989 KB 7989 KB/sec 00:00:01 0 Errors

[root@web02 tools]# tar -xf wordpress-4.5.1-zh_CN.tar.gz

[root@web02 tools]# \cp -a wordpress/* /application/apache/htdocs/php/

[root@web02 tools]# chown -R nginx:nginx /application/apache/htdocs/php/

[root@web02 tools]# ls -ld /application/apache/htdocs/php/

drwxr-xr-x 5 nginx nginx 4096 11月 29 23:37 /application/apache/htdocs/php/

[root@web02 tools]# cd /application/apache/htdocs/php/

1、在浏览器中输入域名进行数据库参数配置,连接wordpress数据库,表前缀要相同:

2、配置多域名访问参数(即ip参数),否则输入域名www.php1.com会自动跳转到域名www.php.com,添加后域名和站点就会相对应起来;

[root@web02 php]# vim wp-config.php

/** enable multiple domains access */

define('WP_SITEURL', 'http://' . $_SERVER['HTTP_HOST']);

define('WP_HOME', 'http://' . $_SERVER['HTTP_HOST']);

此时访问网页是会出现图片加载不出来的情况,需要做nfs存储共享配置;

16.5、nfs共享存储(web01服务器的nfs01服务器)

1、检查web02的nfs的rpc服务:

[root@web02 php]# rpm -qa rpcbind nfs-utils

nfs-utils-1.2.3-78.el6.x86_64

rpcbind-0.2.0-16.el6.x86_64

[root@web02 php]# chkconfig --list rpcbind

rpcbind 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭

[root@web02 php]# /etc/init.d/rpcbind status

rpcbind (pid 1339) 正在运行...

2、挂载nfs共享存储:

[root@web02 php]# showmount -e 172.16.1.31

Export list for 172.16.1.31:

/data 172.16.1.0/24

[root@web02 wp-content]# mount -t nfs 172.16.1.31:/data/ /application/apache/htdocs/php/wp-content/uploads/

[root@web02 wp-content]# df -h

Filesystem Size Used Avail Use% Mounted on

/dev/sda2 57G 2.0G 52G 4% /

tmpfs 296M 0 296M 0% /dev/shm

/dev/sda1 190M 67M 114M 37% /boot

172.16.1.31:/data/ 57G 1.7G 53G 4% /application/apache-2.2.31/htdocs/php/wp-content/uploads

[root@web02 wp-content]# ls uploads/

2018

3、加入开机自启动:

[root@web02 wp-content]# echo 'mount -t nfs 172.16.1.31:/data/ /application/apache/htdocs/php/wp-content/uploads/' >>/etc/rc.local

[root@web02 wp-content]# echo '/etc/init.d/rpcbind start' >>/etc/rc.local

[root@web02 wp-content]# echo '/etc/init.d/httpd start' >>/etc/rc.local

[root@web02 wp-content]# tail -1 /etc/rc.local

mount -t nfs 172.16.1.31:/data/ /application/apache/htdocs/php/wp-content/uploads/

/etc/init.d/httpd start

/etc/init.d/rpcbind start

4、在浏览器中进行测试:

posted @ 2020-02-15 22:59  云起时。  阅读(234)  评论(0编辑  收藏  举报