一、LNMP介绍
1、介绍
LAMP:Linux Apache MySQL PHP。
LNMP:Linux Nginx MySQL PHP。
2、LNMP组合工作流程
用户通过浏览器输入域名请求Nginx web 服务,
如果请求的是静态资源,则由Nginx解析返回给用户;
如果是动态请求(以.php结尾),那么Nginx就会把它通过FastCGI接口发送给PHP引擎服务(FastCGI进程php-fpm)进行解析;
如果这个动态请求要读取数据库,那么PHP就会继续向后请求MySQL数据库,以读取需要的数据,并最终通过Nginx服务把获取的数据返回给用户。
二、FastCGI介绍
1、介绍
CGI(common Gateway Interface)通用网关接口。用于HTTP服务器与其他机器上的程序服务通信交流的一种工具,CGI程序必须运行在网络服务器上。
FastCGI是一个可伸缩地,高速地在HTTP服务器和动态脚本语言间通信的接口,FastCGI接口采用C/S架构,它可以将HTTP服务器和脚本解析服务器分开,同时还能在脚本解析服务器上启动一个或多个脚本来解析守护进程。当HTTP服务器遇到动态程序时,可以将直接交给FastCGI进程来执行,然后将得到的结果返回给浏览器。这种方式可以让HTTP服务器专一的处理静态请求,或者将动态脚本服务器的结果返回给客户端。
三、部署LNMP
1、安装数据库MySQL
(1)下载软件
# useradd mysql -s /sbin/nologin -M #<==创建用户,安装时用到。
#id mysql #<==检查mysql用户是否创建成功。
下载MySQL软件:
#cd /server/tools
# wget -q http://mirrors.163.com/mysql/Downloads/MySQL-5.7/mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz #<==下载二进制软件包
#ls -lsh #<==查看下载文件的大小615M。
(2)采用二进制安装
#tar xf mysql-5.7.26-linux-glibc2.12-x86_64.tar.g #<==二进制安装包
#mkdir -p /application/ #<==创建安装路径。
#mv mysql-5.7.26-linux-glibc2.12-x86_64 /application/mysql-5.7.26
#<==移动到安装路径。
# ln -s /application/mysql-5.7.26/ /application/mysql #<==创建软连接
(3)初始化配置文件my.cnf
[root@web02/application/mysql]#find ./ -name ".cnf" #<==没有找到相应的配置文件。
系统的/etc/my.cnf 文件,是系统自动安装的mariadb库时自带,防止冲突要卸载。
#rpm -e --nodeps mariadb-libs;
#<==卸载软件一定不能用yum,否则一些依赖包也被卸载,其他软件有可能也不可使用。
[root@web02/application/mysql]#vim /etc/my.cnf
[mysqld]
basedir = /application/mysql/
datadir = /application/mysql/data
socket = /tmp/mysql.sock
server_id = 1
port = 3306
log_error = /application/mysql/data/error_mysql.err
[mysql]
socket = /tmp/mysql.sock
prompt = mifengdiandi [\\d]>
(4)初始化数据库
#yum install libaio-devel -y #<==安装mysql依赖包
#mkdir -p /application/mysql/data #<==创建数据库目录
#chown -R mysql.mysql /application/mysql/ #<==授权mysql用户管理mysql目录。
#/application/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/application/mysql/ --datadir=/application/mysql/data
没有提示表示安装成功。
(5)配置并启动mysql数据库
设置systemctl来管理服务:
#vim /etc/systemd/system/mysqld.service
[Unit]
Description=MySQL Server by mifengdiandi
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/application/mysql/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE = 5000

#systemctl start mysqld #<==启动服务
#systemctl enable mysqld #<==设置开机启动
#systemctl status mysqld #<==查看服务状态

(6)查看服务是否启动
#lsof -i :3306
#ps -ef |grep mysqld

(7)查看错误日志
[root@web02/application/mysql/data]#cat error_mysql.err
(8)配置MySQL命令的全局使用路径
#echo 'export PATH=/application/mysql/bin:$PATH'>>/etc/profile
#tail -1 /etc/profile #<==查看配置结果
#source /etc/profile #<==配置文件生效
(9)登录MySQL测试
#mysql #<==还没设置密码,直接进入数据库
#mysqladmin -u root password '123456' #<==更改默认密码
#mysql -uroot -p #<==新的登录方式


快捷键ctrl+d 直接退出mysql>
2、PHP(FastCGI)服务安装
(1)检查安装PHP所需的lib库
PHP程序在开发及运行时会调用诸如zlib、gd等函数库。
#rpm -qa zlib-devel libxml2-devel libjpeg-devel libjpeg-turbo-devel libiconv-devel
#rpm -qa freetype-devel libpng-devel gd-devel libcurl-devel libxslt-devel
如果没有请安装:
#yum install zlib-devel libxml2-devel libjpeg-devel libjpeg-turbo-devel libiconv-devel -y
#yum install freetype-devel libpng-devel gd-devel libcurl-devel libxslt-devel libxslt-devel -y

仅缺少libiconw-devel,因为默认的yum源里没有此包,后面会编译安装。

①安装libiconw-devel库
#cd /server/tools #<==下载到规范目录下
#wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.16.tar.gz
#<==下载libiconw-devel
#tar zxf libiconv-1.16.tar.gz
#cd ./libiconv-1.16
#make
#make install
②安装libmcrypt库
这是一个使用动态加载的模块化的libmcrypt,libmcrypt对于在程序运行时添加/移除算法是有用的。
官网已经不再被支持,先配置第三方域名源
#wget -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum install libmcrypt-devel -y
③安装Mhash加密扩展库
Mhash是基于离散数学原理不可逆向的PHP加密方式扩展库,其在默认情况下不会开启。Mhash可以用于创建校验数值,消息摘要,消息认证码,以及无须原文的关键信息保存(密码)等。
#yum install libmcrypt-devel -y
#rpm -qa libmcrypt-devel -y
④安装Mcrypt加密扩展库
Mcrypt扩展库可以实现加密解密功能,就是既能将明文加密,也可以将密文还原。可以说,Mcrypt是PHP里面重要的加密支持扩展库,该库在默认情况下不开启。
#yum install mhash -y
#rpm -qa mhash
(2)安装PHP(FastCGI方式)服务
①下载软件,安装前准备
#cd /server/tools
#wget -q http://mirrors.sohu.com/php/php-7.3.5.tar.gz
#ls -lsh php-7.3.5.tar.gz
#tar xf php-7.3.5.tar.gz
#cd ./php-7.3.5
#mkdir -p /application/php7.3.5
②编译参数
[root@web02/server/tools/php-7.3.5]#./configure \
--prefix=/application/php7.3.5 \
--enable-mysqlnd \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-iconv-dir=/application/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-fpm \
--enable-mbstring \
--with-gd \
--with-openssl \
--with-mhash \
--enable-pcntl \
--enable-sockets \
--with-xmlrpc \
--enable-soap \
--enable-short-tags \
--enable-static \
--with-xsl \
--with-fpm-user=wwww \
--with-fpm-group=wwww \
--enable-ftp \
--enable-opcache=no

备注:--with-fpm-user与--with-fpm-group的用户及组,最好和配置Nginx时用户及组一致。
③编译安装
[root@web02/server/tools/php-7.3.5]#make
[root@web02/server/tools/php-7.3.5]#make install
[root@web02/server/tools/php-7.3.5]#echo $?
0 #<==返回0表示正确。
#ln -s /application/php7.3.5/ /application/php#<==创建软连接
(3)配置php.ini
[root@web02/server/tools/php-7.3.5]#ls -l php.ini*

[root@web02/server/tools/php-7.3.5]#cp php.ini-development /application/php/lib/php.ini
(4)配置PHP服务(FastCGI模式)配置文件php-fpm.conf
# cd /application/php/etc/
# ls
# cp php-fpm.conf.default php-fpm.conf
# cp php-fpm.d/www.conf.default php-fpm.d/www.conf

(5)启动服务
#/application/php/sbin/php-fpm
四、配置Nginx以支持PHP程序请求访问
(1)子配置文件
[root@web02/application/nginx/conf/extra]#cat 04_blog.conf
server {
listen 80;
server_name blog.etiantian.org;
location / {
root html/blog;
index index.html index.htm;
}
location ~ .*\.(php|php5)?$ {
root html/blog;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
}

(2)主配置文件

(3)写简单的.php。
[root@web02/application/nginx/html/blog]# echo "<?php phpinfo(); ?>" >test_info.php

[root@web02/application/nginx/html/blog]#vim
test_mysql.php
<?php
//$link_id=mysqli_connect('主机名','用户','密码');
$link_id=mysqli_connect('localhost','root','123456') or mysql_error();
if($link_id){
echo "mysql successful.\n";
}else{
echo mysql_error();
}
?>
(4)重启Nginx服务
#nginx -t
#nginx -s reload
(5)hosts文件添加解析(服务器和客户端都添加)
192.168.40.143 blog.mifengdiandi.xyz
Linux:#vim /etc/hosts
Windows:C:\Windows\System32\drivers\etc\hosts
(6)测试
①浏览器输入:http://blog.mifengdiandi.xyz/test_info.php

②浏览器输入:http://blog.mifengdiandi.xyz/test_mysqlphp

数据库连接也成功。
LNMP搭建成功。
补充:设置开机启动
#vim /etc/rc.d/rc.local
/application/php/sbin/php-fpm
/application/nginx/sbin/nginx

#chmod +x /etc/rc.d/rc.local




