LAMP 平台作为目前应用最为广泛的网站服务器架构,其中的“A”对应着web服务软件的Apache ,但是,现在随着时间的推移,越来越多的企业开始使用Nginx这匹黑马,LNMP或LEMP架构也收到越来越多的运维人员的青睐。
废话不说,直接开整。
一、准备工作:
Centos 7 服务器、光盘 MySQL 部署可参考博文:https://blog.51cto.com/14227204/2425596 Nginx 部署可参考博文:https://cloud.tencent.com/developer/article/1501189 准备 PHP 的源码包:https://pan.baidu.com/s/1WARKfQ5ndcL5t5MqXq13zg 提取码: 4zjx
二、安装 PHP 解析环境:
较新版本的 PHP 已经自带了 FPM 模块,用来对PHP解析实例进行管理、优化解析效率。所以需要在编译时 添加“--enable-fpm”来启动此模块。
代码语言:javascript复制[root@mysql /]# yum -y install gd libxml2-devel libjpeg-devel libpng-devel
[root@mysql /]# tar zxf php-5.5.38.tar.gz -C /usr/src/
[root@mysql php-5.5.38]# ./configure --prefix=/usr/local/php5
--with-gd
--with-zlib
--with-mysql=/usr/local/mysql
--with-mysqli=/usr/local/mysql/bin/mysql_config
--with-config-file-path=/usr/local/php5
--enable-mbstring
--enable-fpm
--with-jpeg-dir=/usr/lib && make && make install #配置及编译安装(过程较长)
安装完毕后的调整:
代码语言:javascript复制[root@mysql php-5.5.38]# cp php.ini-development /usr/local/php5/php.ini
[root@mysql /]# ln -s /usr/local/php5/bin/* /usr/local/bin/
[root@mysql /]# ln -s /usr/local/php5/sbin/* /usr/local/sbin/ # 创建链接文件,方便命令使用
安装 ZendGuardLoader:(加速 Nginx 处理速度,可省略)
代码语言:javascript复制[root@mysql /]# tar zxf zend-loader-php5.5-linux-x86_64_update1.tar.gz -C /usr/src/
[root@mysql /]# cd /usr/src/zend-loader-php5.5-linux-x86_64/
[root@mysql zend-loader-php5.5-linux-x86_64]# cp ZendGuardLoader.so /usr/local/php5/lib/php/ # 将 zend 文件复制到PHP目录中
[root@mysql /]# vim /usr/local/php5/php.ini # 写入以下两行
...............
zend_extension=/usr/local/php5/lib/php/ZendGuardLoader.so
zend_loader.enable=1
配置 Nginx 支持 PHP环境:
若要让Nginx能够解析PHP网页,有两种方法可以选择:其一,充当中介,将访问PHP页面的web请求转交给其他服务器(LAMP)去处理;其二,通过使用PHP的FPM模块来调用本机的PHP环境。
1、启用php-pfm进程(该进程默认监听9000端口):
代码语言:javascript复制[root@mysql ~]# cd /usr/local/php5/etc/
[root@mysql etc]# cp php-fpm.conf.default php-fpm.conf
[root@mysql etc]# useradd -M -s /sbin/nologin php # 创建 PHP 用户
[root@mysql etc]# vim php-fpm.conf
......................
pid = run/php-fpm.pid #确认pid文件位置
user = php #运行用户
group = php #运行组
pm.start_servers = 20 #启动时开启的进程数
pm.min_spare_servers = 5 #最少空闲进程数
pm.max_spare_servers = 35 #最多空闲进程数
pm.max_children = 50 #最大子进程数
[root@mysql /]# /usr/local/sbin/php-fpm # 启动 fpm 服务
[root@mysql /]# killall php-fpm # 停止服务
在 php-fpm.conf 配置文件中,pid配置项指出的PID信息的存放位置,对应的实际路径为:/usr/local/php5/var/run/php-fpm.pid,根据上面的配置,可以修改Nginx服务脚本,以便在启动/停止Nginx服务器时将php-fpm进程也自动启动/停止。
代码语言:javascript复制[root@mysql /]# vim /etc/init.d/nginx
#!/bin/bash
# chkconfig: - 99 20
PROG="/usr/local/nginx/sbin/nginx"
PIDF="/usr/local/nginx/logs/nginx.pid"
PROG_FPM="/usr/local/sbin/php-fpm"
PIDF_FPM="/usr/local/php5/var/run/php-fpm.pid"
case "$1" in
start)
$PROG
$PROG_FPM
;;
stop)
kill -s QUIT $(cat $PIDF)
kill -s QUIT $(cat $PIDF_FPM)
;;
restart)
$0 stop
$0 start
;;
reload)
kill -s HUP $(cat $PIDF)
kill -s HUP $(cat $PIDF_FPM)
;;
*)
echo "USAGE:$0 {start | stop | restart | reload}"
exit 1
esac
exit 0
代码语言:javascript复制[root@mysql /]# systemctl daemon-reload #重新加载守护进程,否则会有提示信息
[root@mysql /]# systemctl restart nginx # 重启服务以确认脚本无误
[root@mysql /]# netstat -anpt | grep 9000
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 64964/php-fpm: mast
[root@mysql /]# netstat -anpt | grep 80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 64961/nginx: master
经过上面配置,Nginx和fpm就被绑在一块了,一旦启动或关闭Nginx服务,php-fpm程序也会随之启动或关闭,不需要额外再启动或关闭php-fpm。
配置Nginx支持PHP解析:
无论是将PHP页面交给LAMP服务器去解析,还是调用本机的php-fpm进程进行操作,都需要在“server { }”配置段中添加location设置,以便指定当访问php网页时采用哪种操作。
两种方法的配置项都可以在配置文件的末尾找到相应的模板。复制到相应位置,稍加修改即可用。
对于第一种方法,可以不执行上面php-fpm的配置(转交给其他web服务器处理,使用如下配置语句):
代码语言:javascript复制[root@localhost etc]# vim /usr/local/nginx/conf/nginx.conf
...................#省略部分内容
server {
...................
location ~ .php$ { #访问.php页面的配置段
proxy_pass http://192.168.1.20:80; # apache服务器的监听地址
}
................... // 省略部分内容
}
这里我使用第二种方法(调用本机的php-fpm进程),配置如下:
代码语言:javascript复制server {
.....................
location ~ .php$ {
root /var/www/test1;
fastcgi_index index.php;
fastcgi_pass 127.0.0.1:9000;
include fastcgi.conf
}
代码语言:javascript复制[root@mysql /]# vim /var/www/test1/test.php # 编写测试网页
<?php
$link=mysqli_connect('localhost','root','pwd123');
if($link) echo "恭喜你,数据库连接成功!!!";
mysqli_close($link);
?>
LNMP 平台部署 web 应用:
这里我使用的是 Discuz!,一个社区论坛。可在 http://www.discuz.net 官方下载。
部署程序代码:
代码语言:javascript复制[root@mysql /]# unzip Discuz_X3.3_SC_UTF8.zip
[root@mysql /]# mv upload/ /var/www/test1/bbs # 将 upload 目录放在网站根目录下
[root@mysql tt]# chown -R php:php /var/www/test1/bbs/ # 修改属主属组
创建数据库:
代码语言:javascript复制[root@mysql /]# mysql -u root -p
Enter password: // 输入密码
mysql> create database bbs; // 创建一个专属数据库
mysql> grant all on bbs.* to runbbs@localhost identified by 'pwd123'; // 设置权限
和管理员用户
安装 Discuz:
访问www.test1.com/bbs/admin.php 登录到后台看看: