运维之LNMP环境安装与配置

2022-09-28 19:22:14 浏览数 (1)

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源。

代码语言:javascript复制
yum update -y && yum upgrade -y
yum install epel-release

Step 2.yum update

代码语言:javascript复制
yum install nginx 
systemctl start nginx #启动nginx 
systemctl enable nginx #设置开机启动

Step 3.安装PHP

代码语言:javascript复制
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

代码语言:javascript复制
systemctl start php-fpm #开启php-fpm 
systemctl enable php-fpm #开机自动启动

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

代码语言:javascript复制
# 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服务

代码语言:javascript复制
# service mysqld restart
初次安装mysql是root账户是没有密码的设置密码的方法
  
# mysql -uroot
mysql> set password for 'root'@'localhost' = password('mypasswd');
mysql> exit

Step 6.配置PHP/nginx参数

A) 修改php.ini的配置

代码语言:javascript复制
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的配置

代码语言:javascript复制
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的配置

代码语言:javascript复制
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.调试

代码语言:javascript复制
#查找配置
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

代码语言:javascript复制
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测试页面&访问。

变量定义说明:

代码语言:javascript复制
## 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"

软件包说明:

代码语言:javascript复制
$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脚本:

代码语言:javascript复制
## [ 安装 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脚本:

代码语言:javascript复制
 ## [ 安装 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 <<EOFe[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安装效果

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

WeiyiGeek.

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

代码语言:javascript复制
#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

  • 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脚本:

代码语言:javascript复制
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执行效果

安装异常记录:

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

代码语言:javascript复制
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)

错误原因:

代码语言:javascript复制
#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 报错信息:

代码语言:javascript复制
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配置文件有误

解决方法:

代码语言:javascript复制
#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 报错信息:

代码语言:javascript复制
[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 即可

暂时存放

代码语言:javascript复制
#php-fpm的运行参数
$ php-fpm --fpm-config /usr/local/etc/php/5.4/php-fpm.conf --prefix /usr/local/var

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

0x03 LNMP综合实践

综合配置脚本示例说明:

代码语言:javascript复制
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
}

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

代码语言:javascript复制
$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解决方法:

代码语言:javascript复制
#(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解决方法:

代码语言:javascript复制
第一种,就是把你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


0x04 工具补充

wlnmp安装部署包

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

代码语言:javascript复制
#(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

0 人点赞