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文件时候显示 常见错误原因:
- php-fpm找不到SCRIPT_FILENAME里执行的php文件
- 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
安装使用简单说明:
#(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