[TOC]

0x00 快速入门

描述:1)LNMP是目前互联网主流的WEB服务器架构,主要是由Linux+Nginx+MYSQL|Mariadb+PHP组合,可以发布企业门户网站代码(PHP动态网页),运维人员要能够独立构建LNMP平台。

  • Nginx 是一个web服务器和代理服务器(其功能是负载均衡,正反向代理)
  • Mysql 是一个关系型数据库已经被Oracle收购
  • php-fpm 是一个FastCGI Process Manager(FastCGI进程管理器)

在Linux中安装软件常见的三种方式就是yum安装、rpm包或者源码编译安装;


0x01 YUM手动安装LNMP

安装环境:Centos 7
安装方法:yum

Step 1.安装LNMP之前要安装EPEL,以便安装源以外的软件,如Nginx,phpMyAdmin等。
提示:EPEL即Extra Packages for Enterprise Linux,企业版linux附加包;这个软件仓库里有很多非常常用的软件,而且是专门针对RHEL设计的,对RHEL标准yum源是一个很好的补充,完全免费使用,由Fedora项目维护,所以如果你使用的是RHEL,或者CentOS,Scientific等RHEL系的linux,可以非常放心的使用EPEL的yum源。

1
2
yum update -y && yum upgrade -y
yum install epel-release


Step 2.yum update

1
2
3
yum install nginx 
systemctl start nginx #启动nginx
systemctl enable nginx #设置开机启动


Step 3.安装PHP

1
yum install -y php php-devel php-fpm php-mysql php-common php-devel php-gd libjpeg* php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-mcrypt php-bcmath php-mhash libmcrypt libmcrypt-devel


Step 4.开启php-fpm

1
2
systemctl start php-fpm #开启php-fpm 
systemctl enable php-fpm #开机自动启动


Step 5.安装mysql
CentOS 7的yum源中貌似没有正常安装mysql时的mysql-sever文件,需要去官网上下载(也可以参照网站上的)

1
2
3
# wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
# rpm -ivh mysql-community-release-el7-5.noarch.rpm
# yum install mysql-community-server

成功安装之后重启mysql服务
1
2
3
4
5
6
# service mysqld restart
初次安装mysql是root账户是没有密码的设置密码的方法

# mysql -uroot
mysql> set password for 'root'@'localhost' = password('mypasswd');
mysql> exit


Step 6.配置PHP/nginx参数

  • A) 修改php.ini的配置

    1
    2
    3
    4
    5
    6
    7
    vim /etc/php.ini 
    cgi.fix_pathinfo=1 #将注释去掉,开启PHP的pathinfo伪静态功能。
    max_execution_time = 0 #脚本运行的最长时间,默认30秒
    max_input_time = 300 #脚本可以消耗的时间,默认60秒
    memory_limit = 256M #脚本运行最大消耗的内存,根据你的需求更改数值,默认128M
    post_max_size = 100M #单提交的最大数据,此项不是限制上传单个文件的大小,而是针对整个表单的提交数据进行限制的。限制范围包括表单提交的所有内容.例如:发表贴子时,贴子标题,内容,附件等…默认8M
    upload_max_filesize = 10M #上载文件的最大许可大小 ,默认2M
  • B) 修改php-fpm的配置

    1
    2
    3
    4
    5
    6
    7
    8
    vim /etc/php-fpm.d/www.conf 
    #找到以下两行,解除注释
    listen.owner = nobody
    listen.group = nobody

    #找下以下两行,将各自的apache改为nginx
    user = apache -> user = nginx
    group = apache -> group = nginx
  • C) 修改nginx的配置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    vim /etc/nginx/conf.d/default.conf  

    server {
    listen 80;
    server_name 服务器IP或者域名;
    root /usr/share/nginx/html;
    location / {
    root /usr/share/nginx/html;
    index index.php index.html index.htm;
    }

    error_page 404 /404.html;
    # redirect server error pages to the static page /50x.html
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
    root /usr/share/nginx/html;
    }
    #支持php解析
    location ~ \.php$ {
    root /usr/share/nginx/html;
    try_files $uri = 404;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
    }
    }


Step 7.调试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#查找配置
find / -name nginx.conf

#查看PHP-FPM 监听9000 端口正常
$netstat -npa | grep 9000
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 2142/php-fpm: maste

#改变目录的组和用户
chown nginx.nginx modules/

#修改目录下所有文件所属
chown -R nginx.nginx html

#修改目录下所有文件权限
chmod -R 777 html



8.安装phpmyadmin

1
2
3
4
a) wget https://files.phpmyadmin.net/phpMyAdmin/4.4.12/phpMyAdmin-4.4.12-all-languages.zip 
b) unzip phpMyAdmin-4.4.12-all-languages.zip
c) mv phpMyAdmin-4.4.12-all-languages /usr/share/nginx/html/phpmyadmin
d) chown -R nginx.nginx /var/lib/php/session

注:/usr/share/nginx/html/为网站跟目录,我采用Docker进行安装Centos进行验证的


0x02 源码编译安装LNMP

描述:基于手工MAKE源码方式构建LNMP WEB平台,操作步骤、指令非常的繁琐,如果企业要求快速、高效的配置平台,通过手工操作会消耗大量的人力成本,可以引入SHELL编程自动化实现。流程步骤如下:

  • Nginx官网下载Nginx软件包&解压&编译&安装;
  • MYSQL官网下载MYSQL软件包&解压&编译&安装;
  • PHP官网下载PHP软件包&解压&编译&安装;
  • LNMP配置文件整合,创建PHPinfo测试页面&访问。

变量定义说明:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
## Define nginx variable
NGX_VER=1.17.9
NGX_URI="http://nginx.org/download/nginx-${NGX_VER}.tar.gz"
NGX_NAME="nginx-${NGX_VER}.tar.gz"
NGX_SRC="${NGX_NAME%.tar.gz}"
NGX_DIR="/usr/local/nginx/${NGX_VER}"
NGX_ARGS="--user=nginx --group=nginx --with-http_stub_status_module"

## Define php-fpm variable
PHP_VER=7.4.3
PHP_SOFT="php-${PHP_VER}.tar.bz2"
PHP_URL="http://mirrors.sohu.com/php/${PHP_SOFT}"
PHP_SRC=${PHP_SOFT%.tar.bz2}
PHP_DIR="/usr/local/php/${PHP_VER}"

## Define Mysql-Boost variable
MYSQL_VER=5.7.29
MYSQL_NAME="mysql-boost-${MYSQL_VER}.tar.gz"
MYSQL_URL="http://mirrors.163.com/mysql/Downloads/MySQL-${MYSQL_VER%.*}/mysql-boost-${MYSQL_VER}"
MYSQL_SRC="${MYSQL_NAME%.tar.gz}"
MYSQL_DIR="/usr/local/mysql/${MYSQL_VER}"
MYSQL_DATADIR="/data/mysql/db"

## Define GCC Variable
GCC_VER=5.5.0
GCC_NAME="gcc-${GCC_VER}"
GCC_SRC="${GCC_VER}.tar.xz"
GCC_URL="http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/${GCC_NAME}/gcc-5.5.0.tar.xz"

软件包说明:

1
2
3
4
5
$ls /opt/LNMP/*.tar.gz
/opt/LNMP/mysql-5.7.29.tar.gz
/opt/LNMP/mysql-boost-5.7.29.tar.gz #推荐下载此版本
/opt/LNMP/mysql-8.0.19.tar.gz
/opt/LNMP/nginx-1.17.9.tar.gz


Nginx

Nginx 安装Shell脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
## [ 安装 nginx ]
function nginx_install(){
echo -e "\e[32m 安装Nginx中..... \e[0m"

CHECK_NUM=$(rpm -qa|grep -wcE "gcc|pcre-devel")
if [ $CHECK_NUM -lt 2 ];then
yum install -y wget gzip tar make gcc
yum install -y pcre pcre-devel zlib zlib-devel
fi

CHECK_USER=$(getent passwd | grep -wc nginx)
if [ $CHECK_USER -eq 0 ];then useradd -s /sbin/nologin nginx -M; fi

if [ ! -f $NGX_NAME ];then
wget $NGX_URI
else
echo -e "\e[31m#Messge: Nginx 已存在 无需下载 \e[0m"
fi

if [ ! -d $NGX_SRC ];then tar -zxf $NGX_NAME; fi
if [ ! -d $NGX_DIR ];then mkdir -p $NGX_DIR; fi

cd $NGX_SRC && ./configure --prefix=$NGX_DIR $NGX_ARGS
if [ $? -eq 0 ];then
make && make install
else
echo -e "\e[31m#Error: 编译失败!终止安装 \e[0m"
exit
fi

#echo -e "\e[32m#Messge: Nginx安装成功正在进行防火墙设置 \e[0m"
#fireall_set nginx

echo -e "\e[32m#Messge: 正在启动 Nginx \e[0m"
if [ ! -f /usr/bin/nginx ];then
ln -s $NGX_DIR/sbin/nginx /usr/bin/nginx
fi
$NGX_DIR/sbin/nginx

CHECK_STATUS=$(netstat -tlnp | grep -wc "nginx")
if [ $CHECK_STATUS -ne 0 ];then
echo -e "\e[32m#Nginx 启动成功.... \e[0m"
else
echo -e "\e[31m#Nginx 启动失败.... \e[0m"
fi
}


MySQL

MySQL 安装Shell脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
 ## [ 安装 mysql ]
function mysql_install(){
echo -e "\e[32m 安装Mysql及其yum 依赖安装中..... \e[0m"
yum install -y gcc.x86_64 gcc-c++.x86_64 make perl autoconf openssl* ncurses ncurses-devel bison bison-devel xz -y
yum install -y automake zlib libxml2 libxml2-devel libgcrypt libtool bison
# 验证系统中mariadb版本
# CHECK_MARIADB=$(rpm -qa | grep -w mariadb)
# if [ $CHECK_MARIADB != "" ];then
# rpm -e $CHECK_MARIADB
# fi

# MySQL 8.X 需要环境准备gcc 5.0 (还是推荐二进制的吧)
if [ ! -f ${GCC_SRC} -a ${MYSQL_VER%.*.*} == "8" ];then
#yum install -y cmake3
#wget $GCC_URL
echo "由于8.x需要安装更高版本的GCC暂时放弃"
exit
else
echo "#当前 MySQL 版本 无需安装高版本的 cmake 以及 gcc"
yum install -y cmake && cmake --version
fi

CHECK_USER=$(getent passwd | grep -wc mysql)
if [ $CHECK_USER -eq 0 ];then
useradd -s /sbin/nologin mysql -M
else
echo -e "MySQL用户已添加"
fi

if [ ! -f $MYSQL_NAME ];then
wget $MYSQL_URL
else
echo -e "\e[32m#Messge: MySQL 已存在 无需下载 \e[0m"
fi

if [ ! -d $MYSQL_SRC ];then tar -zxf $MYSQL_NAME; fi
if [ ! -d $MYSQL_DATADIR ];then
mkdir -p $MYSQL_DATADIR
mkdir -p /data/mysql/tmp/
chown -R mysql.mysql /data
fi

if [ ! -f $MYSQL_DIR/bin/mysqld ];then
mkdir -p $MYSQL_DIR
cd $MYSQL_SRC && cmake . -DWITH_BOOST=./boost -DCMAKE_INSTALL_PREFIX=$MYSQL_DIR/ -DSYSCONFDIR=/etc/my.cnf -DSYSTEMD_PID_DIR=$MYSQL_DATADIR/ -DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DMYSQL_DATADIR=$MYSQL_DATADIR/ -DMYSQL_USER=mysql -DMYSQL_TCP_PORT=3306 -DMYSQLX_TCP_PORT=33060 -DTMPDIR=$MYSQL_DATADIR/tmp/ -DWITH_XTRADB_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_JEMALLOC=1 -DMAX_INDEXES=64 -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci

if [ $? -eq 0 ];then
#安装编译时候不建议使用 make -j 4 ,虽然安装快但是可能影响程序的完整性;
make && make install
ln -s $MYSQL_DIR/bin/* /usr/bin/
else
echo -e "\e[31m#Error: 编译失败,终止安装.... \e[0m"
exit
fi
fi

if [ $? -eq 0 ];then
echo -e "\e[32m#MySQL 安装成功 .....\e[0m"
cp /etc/my.cnf /etc/my.cnf.bak
cat > /etc/my.cnf<<END
[mysqld]
datadir=/data/mysql/db/
socket=/tmp/mysql.sock
symbolic-links=0
default_authentication_plugin=mysql_native_password
character-set-server=utf8

[mysqld_safe]
log-error=/data/mysql/db/error.log
pid-file=/data/mysql/db/mysql.pid
END
cd $MYSQL_DIR/
cp support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig --level 35 mysqld on
service mysqld stop
sed -i "s#^basedir=#basedir=${MYSQL_DIR}#g" /etc/init.d/mysqld
sed -i "s#^datadir=#datadir=${MYSQL_DATADIR}/#g" /etc/init.d/mysqld
echo -e "\e[32m##MySQL单机多实例初始化......\e[0m'"
#--initialize-insecure 不安全即密码为空
./bin/mysqld --initialize --user=mysql --basedir=$MYSQL_DIR --datadir=$MYSQL_DATADIR
# ./bin/mysqld_safe --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql/5.7.29/ --user=mysql
service mysqld start

CHECK_STATUS=$(netstat -tlnp | grep -wc "mysqld")
if [ $CHECK_STATUS -ne 0 ];then
echo -e "\e[32m#MySQL 启动成功.... \e[0m"
echo -e "\e[32m#sql> mysql -uroot -p'!/K+ak7*RAkR' --connect-expired-password <<EOF\e[0"
echo -e "\e[32m#alter user user() identified by 'WeiyiGeek' \e[0"
echo -e "\e[32m#EOF \e[0"
else
echo -e "\e[31m#MySQL 启动失败.... \e[0m"
fi
else
echo -e "\e[31m#Error:安装失败,请检查报错....\e[0m"
exit
fi

echo -e "\e[32m#Messge: MySQL安装成功正在进行防火墙设置 \e[0m"
#fireall_set mysql
echo .
}

WeiyiGeek.PHP-fpm安装效果

WeiyiGeek.PHP-fpm安装效果


补充知识:
(1) MySQL Boost编译包依赖
描述:从MySQL 5.7.5版本开始依赖于Boost C++库,我们在安装编译的时候需要指定boost目录的路径-DWITH_BOOST=/opt/mysql-8.0.15/boost/,推荐下载含有Boost源码的源码包;

WeiyiGeek.

WeiyiGeek.

下面主要描述自行安装boost的流程步骤:

1
2
3
4
5
6
7
8
9
#1.YUM/RPM包方式安装boost
https://www.rpmfind.net/linux/rpm2html/search.php

#2.官网进行安装(上面那种方式版本数量有限,不一定满足需求)
https://sourceforge.net/projects/boost/
#安装方式
tar -zxf boost.tar.gz && cd ./boost
./bootstrap.sh --prefix=/usr/local/boost
./b2 install


注意事项:

  • 1.源码安装MySQL时候选择带boost源码的MySQL源码安装包进行安装-DWITH_BOOST=./boost,否则在编译时候在线下载-DDOWNLOAD_BOOST=1 -DWITH_BOOST=/usr/local/boost/(科学上网时选择否则您会知道什么叫做绝望);
    WeiyiGeek.DDOWNLOAD_BOOST

    WeiyiGeek.DDOWNLOAD_BOOST

  • 2.安装编译时候不建议使用 make -j 4 ,虽然安装快但是可能影响程序的完整性;
  • 3.如果想修改MySQL版本号的头文件,实际不建议进行修改include/mysql_version.h.in;
  • 4.MySQL 8.0 需要依赖 cmake3 可选 gcc 5.x(4.8.5经测试没有问题),如果编译过程中产生错误则清空CMakeCache.txt文件后解决对应错误,重新编译即可。
  • 5.安装新版本的GCC后,为了保证原始的GCC可用把新版本做个软链接即可,并且可以在cmake编译参数里设置绝对路径-DCMAKE_CXX_COMPILER=/usr/local/bin/g++ -DCMAKE_C_COMPILER=/usr/local/bin/gcc
  • 6.不同的MySQL版本依赖的最低Boost版本是不一样的需要在cmake编译前查看boost中requires boost_1_xx_0;


PHP-FPM

描述: FPM(`FastCGI 进程管理器|FastCGI Process Manager)用于替换 PHP FastCGI 的大部分附加功能,对于高负载网站是非常有用的。
PHP 安装Shell脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
function php_install(){
echo -e "\e[32m#Message: 正在进行安装php环境..... \e[0m"
if [ ! -f $PHP_SOFT ];then
wget $PHP_URL
else
echo -e "\e[32m#Message: 源码文件已经存在无需重新下载 \e[0m"
fi

CHECK_USER=$(getent passwd | grep -wc "www")
if [ $CHECK_USER -eq 0 ];then useradd -M -s/sbin/nologin www; fi

echo -e "#PHP依赖安装"
yum install libxml2 libxml2-devel gzip bzip2 sqlite-devel -y

if [ ! -d $PHP_SRC ];then
tar jxf $PHP_SOFT
mkdir -p $PHP_DIR
mkdir -p /etc/php/
fi

cd $PHP_SRC && ./configure --prefix=$PHP_DIR --with-config-file-path=$PHP_DIR/php-config --with-pdo-mysql=mysqlnd --enable-mysqlnd --enable-fpm

if [ $? -eq 0 ];then
echo -e "\e[32m#Message: PHP 编译成功正在执行make && make install 安装操作 \e[0m"
make && make install
ln -s $PHP_DIR/etc/* /etc/php/
else
echo -e "\e[31m#Error: 编译失败终止安装.... \e[0m"
exit
fi

#配置 php-fpm 配置文件
cp php.ini-development $PHP_DIR/php.ini
cp $PHP_DIR/etc/php-fpm.conf.default $PHP_DIR/etc/php-fpm.conf
cp $PHP_DIR/etc/php-fpm.d/www.conf.default $PHP_DIR/etc/php-fpm.d/www.conf

#由于下面需要使用systemctl来启动为了不动启动配置文件所以进行设置
sed -i 's#;error_log = log/php-fpm.log#error_log = /var/log/php-fpm.log' $PHP_DIR/etc/php-fpm.conf
sed -i 's#;pid = run/php-fpm.pid#pid = /var/run/php-fpm.pid' $PHP_DIR/etc/php-fpm.conf
sed -i 's#nobody#www#g' $PHP_DIR/etc/php-fpm.conf

#方式1:配置/etc/init.d/进行启动
cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
chmod o+x /etc/init.d/php-fpm
service php-fpm restart

#方式2:配置systectl启动
cp sapi/fpm/php-fpm.service /usr/lib/systemd/user/php-fpm.servic
systemctl daemon-reload
# systemctl start php-fpm
# systemctl status php-fpm

if [ ! -f /usr/bin/php-fpm ];then
ln -s $PHP_DIR/sbin/php-fpm /usr/bin/php-fpm
fi

CHECK_STATUS=$(netstat -tlnp | grep -wc "php-fpm")
if [ $CHECK_STATUS -eq 0 ];then
echo -e "\e[32m#Message: 启动失败请请检查错误原因后重试.... \e[0m"
else
echo -e "\e[32m#Message: 启动成功.... \e[0m"
fi
}

WeiyiGeek.PHP-FPM编译执行结果

WeiyiGeek.PHP-FPM编译执行结果

脚本执行效果:

WeiyiGeek.php-FPM执行效果

WeiyiGeek.php-FPM执行效果


安装异常记录:

问题1: php-fpm Failed to open error_log Read-only file system (30)
错误信息:

1
Mar 05 13:26:13 weiyigeek php-fpm[18283]: [05-Mar-2020 13:26:13] ERROR: failed to open error_log (/usr/local/php/7.4.3/var/log/php-fpm.log): Read-only file system (30)

错误原因:
1
2
3
4
5
6
7
#1.由于我们安装路径在/usr/且没有进行error 与 pid file文件的默认路径
/usr/local/php/7.4.3/var/log/php-fpm.log
/usr/local/php/7.4.3/var/run/php-fpm.pid

#2.我们采用Systemctl管理的方式进行启动,由于Systemctl有一个ProtectSystem参数,从描述中我们可以知道 /usr, /boot, and /etc 对于这个单元调用的进程,目录是只读的不能进行写操作(注意通过/etc/init.d/启动不存在该错误)
# Mounts the /usr, /boot, and /etc directories read-only for processes invoked by this unit.
ProtectSystem=full

解决办法:

  • 方式1:打开 /usr/lib/systemd/system/php-fpm.service 设置如下 ProtectSystem=false
  • 方式2:修改 php-fpm.conf 配置文件夹中的error_file 和 pid_file 到 /var/目录中即可


问题2: ERROR: failed to post process the configuration
报错信息:

1
2
ALERT: [pool www] pm.min_spare_servers(0) must be a positive value
ERROR: failed to post process the configuration

问题原因:

  • #1.在php-fpm安装目录下的/etc/php-fpm.conf未配置pm.min_spare_servers(0)参数以及pid/log配置文件有误

解决方法:

1
2
3
#1.再次编辑php-fpm.conf找到pm.min_spare_server ;pm.min_spare_servers = 5 去除;号。
sed -i 's/;pm.max_spare_servers = 35/pm.max_spare_servers = 35/g' /usr/local/php/etc/php-fpm.conf
sed -i 's/;pm.start_servers = 20/pm.start_servers = 20/g' /usr/local/php/etc/php-fpm.conf


问题3:php-fpm启动时候:No pool defined
报错信息:

1
2
3
[28-Nov-2018 17:13:23] ERROR: No pool defined. at least one pool section must be specified in config file
[28-Nov-2018 17:13:23] ERROR: failed to post process the configuration #上面出现过常常就是配置文件错问题
[28-Nov-2018 17:13:23] ERROR: FPM initialization failed

错误原因:由于我们没有进行对pool配置文件进行配置;
解决方法:进入PHP安装目录/etc/php-fpm.d/然后执行 cp www.conf.default www.conf 即可


暂时存放

1
2
3
4
#php-fpm的运行参数
$ php-fpm --fpm-config /usr/local/etc/php/5.4/php-fpm.conf --prefix /usr/local/var

-p,--prefix) 指定放置运行时文件的相对路径前缀


LNMP综合

综合配置脚本示例说明:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
function lnmp_config(){
echo -e "\e[32m#LNMP 测试配置....\e[0m"
cp $NGX_DIR/conf/nginx.conf{,.bak}
cat > $NGX_DIR/conf/nginx.conf <<EOF
user nginx;
worker_processes 1;
error_log logs/error.log;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
server {
listen 9081;
server_name my.weiyigeek.top;
charset utf-8;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
#error_page 404 /404.html;

# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
location / {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;
include fastcgi_params;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
location ~ /\.ht {
deny all;
}
}
}
EOF
echo "<?php phpinfo(); ?>" > $NGX_DIR/html/phpinfo.php
echo "<?php echo "Hello World! php" ?>" > $NGX_DIR/html/index.php
$NGX_DIR/sbin/nginx -s reload
}

最终执行程序所属者查看:

1
2
3
4
5
6
7
8
$ps aux | grep -E "nginx|php-fpm|mysql"
root 4511 0.0 0.0 11820 1592 ? S 20:54 0:00 /bin/sh /usr/local/mysql/5.7.29/bin/mysqld_safe --datadir=/data/mysql/db/ --pid-file=/data/mysql/db//weiyigeek.pid
mysql 4687 0.0 1.1 1797852 186644 ? Sl 20:54 0:00 /usr/local/mysql/5.7.29/bin/mysqld --basedir=/usr/local/mysql/5.7.29 --datadir=/data/mysql/db --plugin-dir=/usr/local/mysql/5.7.29/lib/plugin --user=mysql --log-error=/data/mysql/db/error.log --pid-file=/data/mysql/db//weiyigeek.pid --socket=/tmp/mysql.sock
root 13942 0.0 0.0 47916 4804 ? Ss 21:49 0:00 php-fpm: master process (/usr/local/php/7.4.3/etc/php-fpm.conf)
php 13943 0.0 0.0 47916 5124 ? S 21:49 0:00 php-fpm: pool www
php 13944 0.0 0.0 47916 5628 ? S 21:49 0:00 php-fpm: pool www
root 14917 0.0 0.0 20568 652 ? Ss 21:58 0:00 nginx: master process nginx
nginx 14918 0.0 0.0 20928 1596 ? S 21:58 0:00 nginx: worker process


安装异常记录:
问题1.Nginx + php-fpm 访问php文件时候显示
常见错误原因:

  1. php-fpm找不到SCRIPT_FILENAME里执行的php文件
  2. php-fpm不能访问所执行的php也就是权限问题

情况1解决方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#(1)在location体中里面添加当文件不存在时返回404而不是交给php-fpm进行处理
location ~ \.php$ {
#文件不存在转404
try_files $uri = 404;
}

#(2)fastcgi_param 参数指定有误
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
#fastcgi_param SCRIPT_FILENAME /script$fastcgi_script_name; //采用下面方式进行替换
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
systemctl restart nginx(/usr/local/nginx/sbin/nginx) #重新加载nginx配置文件

情况2解决方法:

1
2
3
4
5
6
7
第一种,就是把你root文件夹设为其他用户允许
第二种,找到你的php-fpm.conf的配置文件,找到下面这段,把apache替换成你要的用户组

; RPM: apache Choosed to be able to access some dir as httpd
user = apache
; RPM: Keep a group allowed to write in log dir.
group = apache

WeiyiGeek.phpinfo

WeiyiGeek.phpinfo


工具补充

wlnmp安装部署包

描述:wlnmp支持CentOS6、7、8一键部署lnmp环境官网:https://www.wlnmp.com
安装使用简单说明:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#(1)建议阿里云镜像配置epel源(必须)
yum install epel-release

#(2)添加WLNMP一键安装包源
rpm -ivh http://mirrors.wlnmp.com/centos/wlnmp-release-centos.noarch.rpm

#(3)安装LNMP
# Nginx
# php: php5.6/php7.0/php7.1/php7.2/php7.3/php7.4
# php扩展: php5.6/php7.0/php7.1/php7.2/php7.3
# k-v数据库:redis4.x/redis5.x/memcached
# 关系型数据库:MySQL5.5/MySQL5.6/MySQL5.7/MySQL8.0
yum install wnginx wphp74 wmysql57 wphp57-memcache

#(4)修改MySQL密码(默认密码为空)
mysql -uroot -p
mysql> set password = password('weiyigeek'); #5.7.x
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'WeiyiGeek'; #8.x

#(5)nginx中php配置,在nginx配置文件中,找到安装对应php的版本,取消前面#注释,重启nginx即可
#include enable-php56.conf;
#include enable-php70.conf;
#include enable-php71.conf;
#include enable-php72.conf;
#include enable-php73.conf;
#include enable-php74.conf;

#(6)各项服务启动
/etc/init.d/*
/etc/init.d/nginx start


#(7)版本升级
yum update wnginx