首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >php以模块方式、和fpm方式 搭建LAMP环境详解

php以模块方式、和fpm方式 搭建LAMP环境详解

作者头像
保持热爱奔赴山海
发布2019-09-18 10:04:34
8650
发布2019-09-18 10:04:34
举报

CentOS6.6上编译安装LAMP

apache版本:2.4.12

php版本:

mysql版本:mariadb-5.5.43-linux-x86_64.tar.gz

要求:

提供2个虚拟主机,

web1:phpMyAdmin, 同时提供SSL

web2:wordpress;

其中php与其它软件的结合,要求分2种情况实现(1.php模块;2.php是fpm方式)

详细配置过程如下:

1.编译安装httpd(构建 MPM 为动态模块)

# httpd-2.4.9编译过程依赖于pcre-devel软件包

yuminstall pcre-devel -y

# 编译安装apr

tar xf apr-1.5.2.tar.gz
cd apr-1.5.2
./configure --prefix=/usr/local/apr
make -j 4 && make install

# 编译安装apr-util

tar xf apr-util-1.5.4.tar.gz
cd apr-util-1.5.4
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/
make -j 4 && make install

# 编译安装httpd

tar xf httpd-2.4.12.tar.gz
cd httpd-2.4.12
./configure --prefix=/usr/local/apache \-
-sysconfdir=/etc/httpd24 \--enable-so --enable-ssl --enable-cgi \
--enable-rewrite --with-zlib --with-pcre --with-apr=/usr/local/apr \
--with-apr-util=/usr/local/apr-util --enable-modules=most \
--enable-mpms-shared=all --with-mpm=event

make -j 4 && make install

资料:

(1)构建MPM为静态模块

在全部平台中,MPM都可以构建为静态模块。在构建时选择一种MPM,链接到服务器中。如果要改变MPM,必须重新构建。为了使用指定的MPM,请在执行configure脚本时,使用参数 --with-mpm=NAME。NAME是指定的MPM名称。编译完成后,可以使用 ./httpd -l来确定选择的MPM。此命令会列出编译到服务器程序中的所有模块,包括 MPM。

(2)构建 MPM为动态模块

在Unix或类似平台中,MPM可以构建为动态模块,与其它动态模块一样在运行时加载。构建 MPM 为动态模块允许通过修改LoadModule指令内容来改变MPM,而不用重新构建服务器程序。在执行configure脚本时,使用--enable-mpms-shared选项即可启用此特性。当给出的参数为all时,所有此平台支持的MPM模块都会被安装。还可以在参数中给出模块列表。默认MPM,可以自动选择或者在执行configure脚本时通过--with-mpm选项来指定,然后出现在生成的服务器配置文件中。编辑LoadModule指令内容可以选择不同的MPM。

# 修改httpd配置文件

vi/etc/httpd24/httpd.conf:

PidFile "/usr/local/apache/logs/httpd.pid"      # 添加下面一行内容
ServerName 127.0.0.1:80                         #去掉这行的注释,修改为127.0.0.1:80

# 修改环境变量

vi /etc/profile.d/httpd.sh

export PATH=/usr/local/apache/bin:$PATH

source/etc/profile.d/httpd.sh

# 配置httpd的服务启动脚本(2.2版本的httpd脚本基础上修改)

注意下面红色标注的地方,需要根据实际情况修改

vi/etc/init.d/httpd 写入如下内容:

#!/bin/bash
#
# httpd        Startup script for the Apache HTTP Server
#
# chkconfig: - 85 15
# description: Apache Web server.
# processname: httpd
 
# Source function library.
. /etc/rc.d/init.d/functions
 
if [ -f /etc/sysconfig/httpd ]; then
        . /etc/sysconfig/httpd
fi
 
# Start httpd in the C locale by default.
HTTPD_LANG=${HTTPD_LANG-"C"}
 
# This will prevent initlog from swallowing up a pass-phrase promptif
# mod_ssl needs a pass-phrase from the user.
INITLOG_ARGS=""
 
# Set HTTPD=/usr/sbin/httpd.worker in /etc/sysconfig/httpd to use aserver
# with the thread-based "worker" MPM; BE WARNED that somemodules may not
# work correctly with a thread-based MPM; notably PHP will refuse tostart.
 
# Path to the apachectl script, server binary, and short-form for messages.
apachectl=/usr/local/apache/bin/apachectl
httpd=${HTTPD-/usr/local/apache/bin/httpd}
prog=httpd
pidfile=${PIDFILE-/usr/local/apache/logs/httpd.pid}
lockfile=${LOCKFILE-/var/lock/subsys/httpd}
RETVAL=0
 
start() {
        echo -n$"Starting $prog: "
        LANG=$HTTPD_LANGdaemon --pidfile=${pidfile} $httpd $OPTIONS
        RETVAL=$?
        echo
        [ $RETVAL = 0 ]&& touch ${lockfile}
        return $RETVAL
}
 
stop() {
  echo -n $"Stopping$prog: "
  killproc -p ${pidfile} -d 10$httpd
  RETVAL=$?
  echo
  [ $RETVAL = 0 ] &&rm -f ${lockfile} ${pidfile}
}
reload() {
    echo -n $"Reloading$prog: "
    if ! LANG=$HTTPD_LANG$httpd $OPTIONS -t >&/dev/null; then
        RETVAL=$?
        echo $"notreloading due to configuration syntax error"
        failure $"notreloading $httpd due to configuration syntax error"
    else
        killproc -p ${pidfile}$httpd -HUP
        RETVAL=$?
    fi
    echo
}
 
# See how we were called.
case "$1" in
  start)
  start
  ;;
  stop)
  stop
  ;;
  status)
        status -p ${pidfile} $httpd
  RETVAL=$?
  ;;
  restart)
  stop
  start
  ;;
  condrestart)
  if [ -f ${pidfile} ] ; then
    stop
    start
  fi
  ;;
  reload)
        reload
  ;;
 graceful|help|configtest|fullstatus)
  $apachectl $@
  RETVAL=$?
  ;;
  *)
  echo $"Usage: $prog{start|stop|restart|condrestart|reload|status|fullstatus|graceful|help|configtest}"
  exit 1
esac
 
exit $RETVAL
chmod +x /etc/init.d/httpd           #给脚本增加执行权限
chkconfig --add httpd                #将httpd加入服务启动

servicehttpd start

ss -lnt| grep 80                          # 检查是否启动成功

2.安装MariaDB

# 下文以通用二进制格式包的配置为例。

# 准备mysql的数据目录

mkdir /data

# 添加mysql服务账户

useradd -r -s /sbin/nologin mysql
chown -R mysql:mysql /data

# 安装并初始化MariaDB

tar xf mariadb-5.5.43-linux-x86_64.tar.gz -C /usr/local
cd /usr/local/
ln -s mariadb-5.5.43-linux-x86_64 mysql
cd mysql/
chown mysql:mysql ./*
scripts/mysql_install_db --user=mysql --datadir=/data
chown -R root  ./*

# 为mysql提供配置文件

mkdir /etc/mysql
cp support-files/my-large.cnf /etc/mysql/my.cnf

编辑 /etc/mysql/my.cnf ,在[mysqld]配置文件下,添加如下四行:

datadir = /data
basedir = /usr/local/mysql
innodb_file_per_table = on
skip_name_resolve = on

# 为mysql提供服务启动脚本

cp support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
chkconfig --add mysqld

# 添加环境变量

echo "export PATH=/usr/local/mysql/bin:$PATH" >/etc/profile.d/mysql.sh
source /etc/profile.d/mysql.sh

现在mysql就可以servicemysqld start 启动了。

ss -lnt| grep 3306           # 检查mysql是否启动成功

# 运行mysql安装配置向导

./usr/local/mysql/bin/mysql_secure_installation      # 根据提示设置密码、删除帐号等操作
  • 为root用户设置密码 删除匿名账号 取消root用户远程登录 删除test库和对test库的访问权限 刷新授权表使修改生效

# 增加mysql账户

# 查看当前mysql存在的账户情况

wKiom1YBZ5jjzh1mAAJ-u9CnaUA755.jpg
wKiom1YBZ5jjzh1mAAJ-u9CnaUA755.jpg

# 建立一个可以远程访问的账户root@%,密码为amdamd。

mysql -uroot -p 输入密码,进入mysql命令行终端,执行:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'amdamd'WITH GRANT OPTION;
flush privileges;

# 下面还有些配置是可有可无的,但是建议也修改下

目的:使用mysql的安装符合系统使用规范,并将其开发组件导出给系统使用

# 输出mysql的man手册至man命令的查找路径
echo "MANPATH /usr/local/mysql/man" >>/etc/man.config
 
# 输出mysql的头文件至系统头文件路径/usr/include
ln -sv /usr/local/mysql/include /usr/include/mysql
 
# 输出mysql的库文件给系统库查找路径
echo '/usr/local/mysql/lib' > /etc/ld.so.conf.d/mysql.conf
ldconfig    # 让系统重新载入系统库

3.安装php-5.4.40

# 解决依赖关系

# 请配置好yum源(系统安装源及epel源)后执行如下命令:
yum -y groupinstall "Desktop Platform Development"
yum -y install bzip2-devel libmcrypt-devel libxml2-devel

# 编译安装php-5.4.40

tar xf php-5.4.40.tar.bz2
cd php-5.4.40
./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql--with-openssl \
 --with-mysqli=/usr/local/mysql/bin/mysql_config--enable-mbstring \
--with-freetype-dir --with-jpeg-dir --with-png-dir--with-zlib \
--with-libxml-dir=/usr --enable-xml \
--enable-sockets--with-apxs2=/usr/local/apache/bin/apxs --with-mcrypt \
 --with-config-file-path=/etc--with-config-file-scan-dir=/etc/php.d \
--with-bz2  --enable-maintainer-zts

make -j 4
make install

说明:

1、这里为了支持apache的worker或event这两个MPM,编译时使用了--enable-maintainer-zts选项。

2、如果使用PHP5.3以上版本,为了链接MySQL数据库,可以指定mysqlnd,这样在本机就不需要先安装MySQL或MySQL开发包了。mysqlnd从php5.3开始可用,可以编译时绑定到它(而不用和具体的MySQL客户端库绑定形成依赖),但从PHP 5.4开始它就是默认设置了。

./configure--with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd

# 为php提供配置文件

cp php.ini-production /etc/php.ini

# 修改/etc/httpd24/httpd.conf使其支持php扩展

# 添加如下二行
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
 
#定位至DirectoryIndex index.html 修改为:
DirectoryIndex  index.php  index.html
 
LoadModule php5_module       modules/libphp5.so       # 安装过php扩展后,httpd.conf文件里应该有这一行

# 测试php是否可以生效

service httpd restart
编写php版本及数据库连接测试文件
vim  /usr/local/apache/htdocs/index.php
内容如下:
<?php
         $link=mysql_connect('127.0.0.1','root','amdamd');
         if($link)
                   echo"Success";
         else
                   echo"failure";
         mysql_close();
 
         phpinfo();
?>
正常情况下,如果返回结果如下图所示,表示我们上面所有的配置都是没有问题的。
wKioL1YBZ8XBPz0rAAH4wJyQb08459.jpg
wKioL1YBZ8XBPz0rAAH4wJyQb08459.jpg

# 配置1个http链接方式的apache虚拟主机

编辑 /etc/httpd24/httpd.conf

取消Include /etc/httpd24/extra/httpd-vhosts.conf  前面的#注释

编辑 /etc/httpd24/extra/httpd-vhosts.conf写入内容如下:

<VirtualHost *:80>
    DocumentRoot"/web/wp"
    ServerName wp.stu13.com
         <Directory"/web/wp">
                   Options none
                   AllowOverridenone
                   Require allgranted
         </Directory>
    ErrorLog"/var/log/httpd/wp-error.log"
    CustomLog"/var/log/httpd/wp-access.log" combined
</VirtualHost>

# 在未安装xcache情况下,对网站执行压力测试

ab -c 10-n 1000 http://pma.stu13.com/index.php 【phpMyAdmin的登录页】

多次测试,大致结果如下:

结果省略.........

# 安装xcache,为php加速

tar xcache-3.2.0.tar.gz
cdxcache-3.2.0
/usr/local/php/bin/phpize
./configure--enable-xcache --with-php-config=/usr/local/php/bin/php-config
make -j4 && make install

安装完成后,会给出个目录,形如:/usr/local/php/lib/php/extensions/no-debug-zts-20100525/这种。

# 编辑php.ini,整合php和xcache

首先将xcache提供的样例配置导入php.ini

mkdir/etc/php.d

cpxcache.ini /etc/php.d           # xcache.ini文件在xcache的源码目录中

# 修改/etc/php.d/xcache.ini,启用xcache

在[xcache-common]下面修改
extension = /usr/local/php/lib/php/extensions/no-debug-zts-20100525/xcache.so   # 路径是上面安装xcache生成的

# 启用服务器状态

修改主配置/etc/http24/httpd.conf,添加如下内容:

<Location /server-status>
    SetHandler server-status
    Require all granted           # 为了安全起见,建议不是允许全部人防止该页面。
         Requireip 192.168.2.1    # 如改成Require ip 192.168.2.1 ,只允许这个指定的IP访问server-status页面
</Location>

mod_status模块可以让管理员查看服务器的执行状态,它通过一个HTML页面展示了当前服务器的统计数据。这些数据通常包括但不限于:

(1) 处于工作状态的worker进程数;

(2) 空闲状态的worker进程数;

(3) 每个worker的状态,包括此worker已经响应的请求数,及由此worker发送的内容的字节数;

(4) 当前服务器总共发送的字节数;

(5) 服务器自上次启动或重启以来至当前的时长;

(6) 平均每秒钟响应的请求数、平均每秒钟发送的字节数、平均每个请求所请求内容的字节数;

# 安装过xcache后,再次对网站执行压力测试

ab -c 10-n 1000 http://pma.stu13.com/index.php

多次测试,结果会发现比未安装时候节约了2/3的时间。

# 配置httpd以支持SSL网页访问

vi/etc/httpd24/httpd.conf 修改内容如下

# 去掉这三行的注释
LoadModule ssl_module modules/mod_ssl.so
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
Include /etc/httpd24/extra/httpd-ssl.conf

vi/etc/httpd24/extra/httpd-ssl.conf 修改内容如下

<VirtualHost *:443>
DocumentRoot "/web/pma"
ServerName pma.stu13.com
<Directory "/web/pma">
         Options none
         Require all granted
</Directory>
ErrorLog "/var/log/httpd/ssl-error.log"
TransferLog "/var/log/httpd/ssl-access.log"
SSLCertificateFile"/etc/httpd24/ssl/pma.stu13.com.crt"
SSLCertificateKeyFile "/etc/httpd24/ssl/httpd.key"
........
<VirtualHost >

说明:CA认证不是本文的重点,这里略过了,详情参考其他博文。

第二部分、fpm方式的php的LAMP环境搭建

apache、MySQL的安装与前面一样,这里只是大致说下。

2.1编译安装httpd【没有安装xcache加速】

2.2配置通用二进制MariaDB

2.3编译安装php

# 解决依赖关系(有的包在epel源里)

yum -y groupinstall "X Software Development"
yum install libmcrypt libmcrypt-devel mhash mhash-devel -y

# 编译安装php-5.4.40

tar xf php-5.4.40.tar.gz
cd php-5.4.40
./configure --prefix=/usr/local/php5 --with-mysql=/usr/local/mysql--with-openssl --with-mysqli=/usr/local/mysql/bin/mysql_config--enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir--with-zlib --with-libxml-dir=/usr --enable-xml --enable-sockets --enable-fpm--with-mcrypt --with-config-file-path=/etc--with-config-file-scan-dir=/etc/php.d --with-bz2
make -j 4 && make install

# 为php提供配置文件

cp php.ini-production /etc/php.ini

# 为php-fpm添加服务启动

cp sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm
chmod +x /etc/rc.d/init.d/php-fpm
chkconfig --add php-fpm
chkconfig php-fpm on

# 为php-fpm提供配置文件

cp /usr/local/php5/etc/php-fpm.conf.default/usr/local/php5/etc/php-fpm.conf

# 编辑php-fpm的配置文件

vim /usr/local/php5/etc/php-fpm.conf

配置fpm的相关选项为你所需要的值,并启用pid文件(如下最后一行):

pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 2
pm.max_spare_servers = 8
pid = /usr/local/php5/var/run/php-fpm.pid

说明:

pm.max_children:静态方式下开启的php-fpm进程数量。

pm.start_servers:动态方式下的起始php-fpm进程数量。

pm.min_spare_servers:动态方式下的最小php-fpm进程数量。

pm.max_spare_servers:动态方式下的最大php-fpm进程数量。

接下来就可以启动php-fpm了:

servicephp-fpm start

ps aux |grep php-fpm     # 检查是否启动成功

ss -lntp| grep php-fpm    # 检查端口是否在监听

2.4配置httpd支持php-fpm

# 编辑/etc/httpd24/httpd.conf,取消下面2行的注释

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so

# 配置虚拟主机支持fcgi

# vi/etc/httpd24/extra/httpd-vhosts.conf在原来的基础上,增加下面红色的两行内容

<VirtualHost *:80>
    DocumentRoot"/web/wp"
    ServerName wp.stu13.com
   
   ProxyRequests Off         # php-fpm 需要增加这一行
   ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/web/wp/$1  # php-fpm 需要增加这一行
   
    <Directory"/web/wp">
        Options none
        AllowOverride none
        Require all granted
    </Directory>
    ErrorLog"/var/log/httpd/wp-error.log"
    CustomLog"/var/log/httpd/wp-access.log" combined
</VirtualHost>

# vi/etc/httpd24/extra/httpd-ssl.conf在原来的基础上,增加下面红色的两行内容

<VirtualHost *:443>
DocumentRoot "/web/pma"
ServerName pma.stu13.com
 
   ProxyRequests Off        # php-fpm需要增加这一行
   ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/web/pma/$1  # php-fpm需要增加这一行
 
<Directory "/web/pma">
         Options none
         Require all granted
</Directory>
ErrorLog "/var/log/httpd/ssl-error.log"
TransferLog "/var/log/httpd/ssl-access.log"
SSLCertificateFile"/etc/httpd24/ssl/pma.stu13.com.crt"    # 注意这里路径
SSLCertificateKeyFile "/etc/httpd24/ssl/httpd.key"        # 注意这里路径
........
<VirtualHost >

说明:

ProxyRequestsOff:关闭正向代理

ProxyPassMatch:把以.php结尾的文件请求发送到php-fpm进程,php-fpm至少需要知道运行的目录和URI,所以这里直接在fcgi://127.0.0.1:9000后指明了这两个参数,其它的参数的传递已经被mod_proxy_fcgi.so进行了封装,不需要手动指定。

# 配置httpd支持php页面

vi/etc/httpd24/httpd.conf

AddType application/x-httpd-php .php                         # 添加这一行
AddType application/x-httpd-php-source  .phps                # 添加这一行
DirectoryIndex  index.php  index.html                        # 增加对index.php的支持

# 可以编写个test.php测试页,放到网站根目录下:

<?php
         phpinfo();
?>

# 安装配置xcache

tar xf xcache-3.2.0.tar.gz
cd xcache-3.2.0
/usr/local/php5/bin/phpize
./configure --enable-xcache --with-php-config=/usr/local/php5/bin/php-config
make && make install
cat xcache.ini >> /etc/php.ini

serverhttpd restart        # 重启httpd服务,使xcache生效。

# 压力测试

过程省略......

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015-09-22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档