一、.Linux的网络配置
1. 打开VMware 虚拟网络编辑器 选择相应的网络
NAT或host-only
2. 打开Windows对应的虚拟网卡
vmnet1(host-only) 和 vmnet8(NAT)
3. 配置虚拟网络编辑器对应的ip段
192.168.100.0
4. 进入Linux,打开终端,修改配置文件
vim /etc /sysconfig /network-scripts/ifcfg-ens33
**修改内容如下**:
BOOTPROTO=static ###
ONBOOT=yes ###
IPADDR=192.168.100.20 ###
NETMASK="255.255.255.0" # centos7可以不配
GATEWAY=192.168.100.2 ###
DNS1=8.8.8.8 ###
DNS2=114.114.114.114 # 可以不配置
5. 重启网络
systemctl restart network
克隆如果网络启动不了:
查看
systemctl status network,如果是control process exit这个错误,需要关闭网络管理工具
systemctl stop NetworkManager //临时关闭 即时生效
systemctl disable NetworkManager //永久关闭 重启以后才生效,要不然光设置此项没效果
6. 关闭Linux的防火墙
systemctl stop firewalld //临时修改
systemctl disable firewalld //永久修改
7 . 关闭selinux
getenforce //查看
setenforce 0 //临时修改
vim /etc/selinux/config //永久修改
SELINUX=disabled
8 . 修改主机名 为lnmp
一次性修改主机名 : hostnamectl set-hostname lnmp
su – 生效
//主机网卡的配置与VMware的虚拟主机在同一网段即可
二、
二、安装与配置MySQL
1.安装MySQL
#上传二进制编译包至虚拟机
[root@localhost ~]# cd /usr/local/src/
[root@localhost src]# ls
libmcrypt-2.5.7 nginx-1.17.8.tar.gz
libmcrypt-2.5.7.tar.gz php-5.6.30
mysql-5.6.47-linux-glibc2.12-x86_64.tar.gz php-5.6.30.tar.gz
nginx-1.17.8
#yum安装必要工具组件
[root@localhost src]# yum install -y net-tools vim tree
[root@localhost src]# tar -zxf mysql-5.6.47-linux-glibc2.12-x86_64.tar.gz
# 移动 MySQL的包到新的目录
[root@localhost src]# mv mysql-5.6.47-linux-glibc2.12-x86_64 /usr/local/mysql
# 创建MySQL用户,不可登录。启动需要
[root@localhost src]# useradd -s /sbin/nologin mysql
[root@localhost src]# cd /usr/local/mysql/
# 创建存放数据目录;更改权限
[root@localhost mysql]# mkdir -p /data/mysql
[root@localhost mysql]# chown -R mysql:mysql /data/mysql/
[root@localhost mysql]# cd /data/mysql/
[root@localhost mysql]# ls -la
total 2
drwxr-xr-x. 5 mysql mysql 104 Aug 9 18:10 .
drwxr-xr-x. 3 root root 18 Aug 9 18:05 ..
[root@localhost mysql]# cd /usr/local/mysql/
# 需要依赖
[root@localhost mysql]# yum install -y perl-Module-Install
# 初始化,上面有两个ok确定安装成功
[root@localhost mysql]# ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql/
2.配置MySQL
[root@localhost mysql]# cp support-files/my-default.cnf /etc/my.cnf
cp: overwrite ‘/etc/my.cnf’? y
[root@localhost mysql]# vim /etc/my.cnf
basedir = /usr/local/mysql
datadir = /data/mysql
port = 3306
server_id = 29
socket = /tmp/mysql.sock
# 配置启动脚本
[root@localhost mysql]# cp support-files/mysql.server /etc/init.d/mysqld
[root@localhost mysql]# chmod 777 /etc/init.d/mysqld
[root@localhost mysql]# vim /etc/init.d/mysqld
basedir=/usr/local/mysql
datadir=/data/mysql
[root@localhost mysql]# chkconfig --add mysqld
[root@localhost mysql]# chkconfig mysql on
[root@localhost mysql]# service mysqld start
Starting MySQL. SUCCESS!
[root@localhost mysql]# netstat -ntlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1462/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 2605/master
tcp6 0 0 :::3306 :::* LISTEN 7891/mysqld
tcp6 0 0 :::22 :::* LISTEN 1462/sshd
tcp6 0 0 ::1:25 :::* LISTEN 2605/master
三、安装与配置PHP
1.安装PHP
[root@localhost src]# cd /usr/local/src/
#上传二进制编译包至虚拟机
[root@localhost src]# ls
mysql-5.6.47-linux-glibc2.12-x86_64.tar.gz php-5.6.30.tar.gz
# 依赖
[root@localhost src]# yum install -y gcc libxml2-devel openssl openssl-devel bzip2 bzip2-devel libpng libpng-devel freetype freetype-devel eplel-release libmcrypt-devel libcurl-devel libjpeg-devel
#解压上传的文件包
[root@localhost src]# tar -zxf php-5.6.30.tar.gz
[root@localhost src]# cd php-5.6.30
#建立PHP用户
[root@localhost php-5.6.30]# useradd -s /sbin/nologin php-fpm
#进行编译
[root@localhost php-5.6.30]# ./configure --prefix=/usr/local/php-fpm --with-config-file-path=/usr/local/php-fpm/etc --enable-fpm --with-fpm-user=php-fpm --with-fpm-group=php-fpm --with-mysql=/usr/local/mysql --with-mysql-sock=/tmp/mysql.sock --with-libxml-dir --with-gd --with-jpeg-dir --with-png-dir --with-freetype-dir --with-iconv-dir --with-zlib-dir --with-mcrypt --enable-soap --enable-gd-native-ttf --enable-ftp --enable-mbstring --enable-exif --disable-ipv6 --with-pear --with-curl --with-openssl
# 出现错误的话可能是环境缺少依赖,安装对应的依赖或者安装gcc
#yum install -y libmcrypt-devel
#重新进行编译
[root@localhost php-5.6.30]# ./configure --prefix=/usr/local/php-fpm --with-config-file-path=/usr/local/php-fpm/etc --enable-fpm --with-fpm-user=php-fpm --with-fpm-group=php-fpm --with-mysql=/usr/local/mysql --with-mysql-sock=/tmp/mysql.sock --with-libxml-dir --with-gd --with-jpeg-dir --with-png-dir --with-freetype-dir --with-iconv-dir --with-zlib-dir --with-mcrypt --enable-soap --enable-gd-native-ttf --enable-ftp --enable-mbstring --enable-exif --disable-ipv6 --with-pear --with-curl --with-openssl
+--------------------------------------------------------------------+
| License: |
| This software is subject to the PHP License, available in this |
| distribution in the file LICENSE. By continuing this installation |
| process, you are bound by the terms of this license agreement. |
| If you do not agree with the terms of this license, you must abort |
| the installation process at this point. |
+--------------------------------------------------------------------+
Thank you for using PHP.
config.status: creating php5.spec
config.status: creating main/build-defs.h
config.status: creating scripts/phpize
config.status: creating scripts/man1/phpize.1
config.status: creating scripts/php-config
config.status: creating scripts/man1/php-config.1
config.status: creating sapi/cli/php.1
config.status: creating sapi/fpm/php-fpm.conf
config.status: creating sapi/fpm/init.d.php-fpm
config.status: creating sapi/fpm/php-fpm.service
config.status: creating sapi/fpm/php-fpm.8
config.status: creating sapi/fpm/status.html
config.status: creating sapi/cgi/php-cgi.1
config.status: creating ext/phar/phar.1
config.status: creating ext/phar/phar.phar.1
config.status: creating main/php_config.h
config.status: executing default commands
#这样就是编译成功
#接下来进行make编译
[root@localhost php-5.6.30]# make && make install
# 遇到报错
/usr/bin/ld: note: 'SSLv23_client_method@@libssl.so.10' is defined in DSO /lib64/libssl.so.10 so try adding it to the linker command line
/lib64/libssl.so.10: could not read symbols: Invalid operation
collect2: error: ld returned 1 exit status
make: *** [sapi/cli/php] Error 1
# 解决方法 在一百行左右 -lcrypt -lpthread
[root@localhost php-5.6.30]# vim Makefile
# 继续编译 时间比较久
[root@localhost php-5.6.30]# make && make install
#查看刚刚执行的编译是否有错误
[root@localhost php-5.6.30]# echo $?
0
2.配置PHP
# 复制配置文件
[root@localhost php-5.6.30]# cp php.ini-production /usr/local/php-fpm/etc/php.ini
# 修改配置文件
[root@localhost php-5.6.30]# vim /usr/local/php-fpm/etc/php-fpm.conf
[global]
pid = /usr/local/php-fpm/var/run/php-fpm.pid
error_log = /usr/local/php-fpm/var/log/php-fpm.log
[www]
listen = /tmp/php-fcgi.sock
listen.mode = 666
user = php-fpm
group = php-fpm
pm = dynamic
pm.max_children = 50
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500
rlimit_files = 1024
[root@localhost php-5.6.30]# useradd -s /sbin/nologin php-fpm
# 带有successful 表示成功。
[root@localhost php-5.6.30]# /usr/local/php-fpm/sbin/php-fpm -t
[09-Aug-2021 21:21:15] NOTICE: configuration file /usr/local/php-fpm/etc/php-fpm.conf test is successful
# 启动php-fpm
#复制文件
[root@localhost php-5.6.30]# cp /usr/local/src/php-5.6.30/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
#更改文件权限
[root@localhost php-5.6.30]# chmod 755 /etc/init.d/php-fpm
#启动PHP
[root@localhost php-5.6.30]# service php-fpm start
Starting php-fpm done
#设置开机自启
[root@localhost php-5.6.30]# chkconfig php-fpm on
#测试
[root@localhost php-5.6.30]# ps aux |grep php-fpm
root 104939 0.0 0.2 127964 4848 ? Ss 21:26 0:00php-fpm: master process (/usr/local/php-fpm/etc/php-fpm.conf)
php-fpm 104940 0.0 0.2 127964 4592 ? S 21:26 0:00php-fpm: pool www
php-fpm 104941 0.0 0.2 127964 4592 ? S 21:26 0:00php-fpm: pool www
php-fpm 104942 0.0 0.2 127964 4596 ? S 21:26 0:00php-fpm: pool www
php-fpm 104943 0.0 0.2 127964 4596 ? S 21:26 0:00php-fpm: pool www
php-fpm 104944 0.0 0.2 127964 4600 ? S 21:26 0:00php-fpm: pool www
php-fpm 104945 0.0 0.2 127964 4600 ? S 21:26 0:00php-fpm: pool www
php-fpm 104946 0.0 0.2 127964 4600 ? S 21:26 0:00php-fpm: pool www
php-fpm 104947 0.0 0.2 127964 4600 ? S 21:26 0:00php-fpm: pool www
php-fpm 104948 0.0 0.2 127964 4600 ? S 21:26 0:00php-fpm: pool www
php-fpm 104949 0.0 0.2 127964 4600 ? S 21:26 0:00php-fpm: pool www
php-fpm 104950 0.0 0.2 127964 4600 ? S 21:26 0:00php-fpm: pool www
php-fpm 104951 0.0 0.2 127964 4600 ? S 21:26 0:00php-fpm: pool www
php-fpm 104952 0.0 0.2 127964 4600 ? S 21:26 0:00php-fpm: pool www
php-fpm 104953 0.0 0.2 127964 4600 ? S 21:26 0:00php-fpm: pool www
php-fpm 104954 0.0 0.2 127964 4600 ? S 21:26 0:00php-fpm: pool www
php-fpm 104955 0.0 0.2 127964 4600 ? S 21:26 0:00php-fpm: pool www
php-fpm 104956 0.0 0.2 127964 4600 ? S 21:26 0:00php-fpm: pool www
php-fpm 104957 0.0 0.2 127964 4600 ? S 21:26 0:00php-fpm: pool www
php-fpm 104958 0.0 0.2 127964 4604 ? S 21:26 0:00php-fpm: pool www
php-fpm 104959 0.0 0.2 127964 4604 ? S 21:26 0:00php-fpm: pool www
root 104962 0.0 0.0 112820 964 pts/0 S+ 21:26 0:00 grep --color=auto php-fpm
四、安装与配置Nginx
1.安装Nginx
# 上传安装包
[root@localhost ~]# cd /usr/local/src/
[root@localhost src]# ls
mysql-5.6.47-linux-glibc2.12-x86_64.tar.gz php-5.6.30
nginx-1.17.8.tar.gz php-5.6.30.tar.gz
#解压文件包
[root@localhost src]# tar zxf nginx-1.17.8.tar.gz
[root@localhost src]# cd nginx-1.17.8
#进行编译
[root@localhost nginx-1.17.8]# ./configure --prefix=/usr/local/nginx
Configuration summary
+ using system PCRE library
+ OpenSSL library is not used
+ using system zlib library
nginx path prefix: "/usr/local/ngin"
nginx binary file: "/usr/local/ngin/sbin/nginx"
nginx modules path: "/usr/local/ngin/modules"
nginx configuration prefix: "/usr/local/ngin/conf"
nginx configuration file: "/usr/local/ngin/conf/nginx.conf"
nginx pid file: "/usr/local/ngin/logs/nginx.pid"
nginx error log file: "/usr/local/ngin/logs/error.log"
nginx http access log file: "/usr/local/ngin/logs/access.log"
nginx http client request body temporary files: "client_body_temp"
nginx http proxy temporary files: "proxy_temp"
nginx http fastcgi temporary files: "fastcgi_temp"
nginx http uwsgi temporary files: "uwsgi_temp"
nginx http scgi temporary files: "scgi_temp"
[root@localhost nginx-1.17.8]# make && make install
#查看返回值
[root@localhost nginx-1.17.8]# echo $?
0
# 因为文件比较小,安装速度很快。
2.配置Nginx
#修改配置文件
[root@localhost nginx-1.17.8]# vim /etc/init.d/nginx
#添加以下内容
#!/bin/bash
# chkconfig: - 30 21
# description: http service.
# Source Function Library
. /etc/init.d/functions
# Nginx Settings
NGINX_SBIN="/usr/local/nginx/sbin/nginx"
NGINX_CONF="/usr/local/nginx/conf/nginx.conf"
NGINX_PID="/usr/local/nginx/logs/nginx.pid"
RETVAL=0
prog="Nginx"
start()
{
echo -n $"Starting $prog: "
mkdir -p /dev/shm/nginx_temp
daemon $NGINX_SBIN -c $NGINX_CONF
RETVAL=$?
echo
return $RETVAL
}
stop()
{
echo -n $"Stopping $prog: "
killproc -p $NGINX_PID $NGINX_SBIN -TERM
rm -rf /dev/shm/nginx_temp
RETVAL=$?
echo
return $RETVAL
}
reload()
{
echo -n $"Reloading $prog: "
killproc -p $NGINX_PID $NGINX_SBIN -HUP
RETVAL=$?
echo
return $RETVAL
}
restart()
{
stop
start
}
configtest()
{
$NGINX_SBIN -c $NGINX_CONF -t
return 0
}
case "$1" in
start)
start
;;
stop)
stop
;;
reload)
reload
;;
restart)
restart
;;
configtest)
configtest
;;
*)
echo $"Usage: $0 {start|stop|reload|restart|configtest}"
RETVAL=1
esac
exit $RETVAL
#修改文件权限
[root@localhost nginx-1.17.8]# chmod 755 /etc/init.d/nginx
[root@localhost local]# cd /etc/init.d/
[root@localhost init.d]# ls -al
total 56
drwxr-xr-x. 2 root root 104 Sep 3 13:28 .
drwxr-xr-x. 10 root root 4096 Sep 3 12:01 ..
-rw-r--r--. 1 root root 13948 Sep 16 2015 functions
-rwxr-xr-x. 1 root root 10592 Sep 3 11:44 mysql
-rwxr-xr-x. 1 root root 2989 Sep 16 2015 netconsole
-rwxr-xr-x. 1 root root 6630 Sep 16 2015 network
-rwxr-xr-x. 1 root root 942 Sep 3 13:28 nginx
-rwxr-xr-x. 1 root root 2358 Sep 3 12:50 php-fpm
-rw-r--r--. 1 root root 1160 Feb 2 2021 README
#增加指定服务
[root@localhost nginx-1.17.8]# chkconfig --add nginx
#设置开机自启
[root@localhost nginx-1.17.8]# chkconfig nginx on
#清空文件内容
[root@localhost nginx-1.17.8]# > /usr/local/nginx/conf/nginx.conf
#添加如下内容
[root@localhost nginx-1.17.8]# vim /usr/local/nginx/conf/nginx.conf
user nobody nobody;
worker_processes 2;
error_log /usr/local/nginx/logs/nginx_error.log crit;
pid /usr/local/nginx/logs/nginx.pid;
worker_rlimit_nofile 51200;
events
{
use epoll;
worker_connections 6000;
}
http
{
include mime.types;
default_type application/octet-stream;
server_names_hash_bucket_size 3526;
server_names_hash_max_size 4096;
log_format combined_realip '$remote_addr $http_x_forwarded_for [$time_local]'
' $host "$request_uri" $status'
' "$http_referer" "$http_user_agent"';
sendfile on;
tcp_nopush on;
keepalive_timeout 30;
client_header_timeout 3m;
client_body_timeout 3m;
send_timeout 3m;
connection_pool_size 256;
client_header_buffer_size 1k;
large_client_header_buffers 8 4k;
request_pool_size 4k;
output_buffers 4 32k;
postpone_output 1460;
client_max_body_size 10m;
client_body_buffer_size 256k;
client_body_temp_path /usr/local/nginx/client_body_temp;
proxy_temp_path /usr/local/nginx/proxy_temp;
fastcgi_temp_path /usr/local/nginx/fastcgi_temp;
fastcgi_intercept_errors on;
tcp_nodelay on;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 8k;
gzip_comp_level 5;
gzip_http_version 1.1;
gzip_types text/plain application/x-javascript text/css text/htm
application/xml;
server
{
listen 80;
server_name localhost;
index index.html index.htm index.php;
root /usr/local/nginx/html;
location ~ \.php$
{
include fastcgi_params;
fastcgi_pass unix:/tmp/php-fcgi.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name;
}
}
}
#检查文件是否出错
[root@localhost nginx-1.17.8]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
# 启动服务
[root@localhost nginx-1.17.8]# service nginx start
Starting nginx (via systemctl): [ OK ]
#检查进程
[root@localhost nginx-1.17.8]# ps aux |grep nginx
root 107675 0.0 0.0 20572 636 ? Ss 22:46 0:00nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
nobody 107676 0.0 0.1 22968 3188 ? S 22:46 0:00nginx: worker process
nobody 107677 0.0 0.1 22968 3188 ? S 22:46 0:00nginx: worker process
root 107680 0.0 0.0 112816 968 pts/0 S+ 22:46 0:00 grep --color=auto nginx
#查看端口
[root@localhost nginx-1.17.8]# netstat -ntlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 107675/nginx: maste
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1462/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 2605/master
tcp6 0 0 :::3306 :::* LISTEN 7891/mysqld
tcp6 0 0 :::22 :::* LISTEN 1462/sshd
tcp6 0 0 ::1:25 :::* LISTEN 2605/master
#测试文件
[root@localhost nginx-1.17.8]# curl localhost
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
#测试解析PHP
[root@localhost nginx-1.17.8]# vim /usr/local/nginx/html/1.php
<?php
echo "test php scripts"
?>
[root@localhost nginx-1.17.8]# curl localhost/1.php
test php scripts[root@lnmp nginx-1.17.8]#
#成功
PHP-fpm
php-fpm的pool
Nginx可以配置多个主机,php-fpm也可以配置多个pool
配置多个pool可以隔离开各个网站,例如一个网站有问题,把PHP资源耗尽了,那其他网站和这个网站使用的是同一个pool 那也会受到影响,所以我们可以给每个站点都配置一个pool。网站报错502一般和PHP有关。
给不同的站点分别配置不同的pool
## 给两个站点分别配置不同的pool
[root@localhost ~]# ps -ef |grep php
root 1195 1 0 02:15 ? 00:00:00 php-fpm: master process (/usr/local/php-fpm/etc/php-fpm.conf)
php-fpm 1209 1195 0 02:15 ? 00:00:00 php-fpm: pool www
php-fpm 1211 1195 0 02:15 ? 00:00:00 php-fpm: pool www
php-fpm 1212 1195 0 02:15 ? 00:00:00 php-fpm: pool www
php-fpm 1213 1195 0 02:15 ? 00:00:00 php-fpm: pool www
php-fpm 1214 1195 0 02:15 ? 00:00:00 php-fpm: pool www
php-fpm 1215 1195 0 02:15 ? 00:00:00 php-fpm: pool www
php-fpm 1216 1195 0 02:15 ? 00:00:00 php-fpm: pool www
php-fpm 1219 1195 0 02:15 ? 00:00:00 php-fpm: pool www
php-fpm 1220 1195 0 02:15 ? 00:00:00 php-fpm: pool www
php-fpm 1221 1195 0 02:15 ? 00:00:00 php-fpm: pool www
php-fpm 1222 1195 0 02:15 ? 00:00:00 php-fpm: pool www
php-fpm 1228 1195 0 02:15 ? 00:00:00 php-fpm: pool www
php-fpm 1229 1195 0 02:15 ? 00:00:00 php-fpm: pool www
php-fpm 1230 1195 0 02:15 ? 00:00:00 php-fpm: pool www
php-fpm 1231 1195 0 02:15 ? 00:00:00 php-fpm: pool www
php-fpm 1232 1195 0 02:15 ? 00:00:00 php-fpm: pool www
php-fpm 1233 1195 0 02:15 ? 00:00:00 php-fpm: pool www
php-fpm 1234 1195 0 02:15 ? 00:00:00 php-fpm: pool www
php-fpm 1235 1195 0 02:15 ? 00:00:00 php-fpm: pool www
php-fpm 1238 1195 0 02:15 ? 00:00:00 php-fpm: pool www
root 2537 2517 0 02:15 pts/0 00:00:00 grep --color=auto php
# 进入配置文件目录
[root@localhost ~]# cd /usr/local/php-fpm/etc/
# 添加一个pool为123.com
[root@localhost etc]# vim php-fpm.conf
[global]
pid = /usr/local/php-fpm/var/run/php-fpm.pid
error_log = /usr/local/php-fpm/var/log/php-fpm.log
[www]
listen = /tmp/php-fcgi.sock
listen.mode = 666
user = php-fpm
group = php-fpm
pm = dynamic
pm.max_children = 50
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500
rlimit_files = 1024
[123.com]
listen = /tmp/123.sock
listen.mode = 666
user = php-fpm
group = php-fpm
pm = dynamic
pm.max_children = 50
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500
rlimit_files = 1024
# 检查语法
[root@localhost etc]# /usr/local/php-fpm/sbin/php-fpm -t
[19-Aug-2021 07:13:29] NOTICE: configuration file /usr/local/php-fpm/etc/php-fpm.conf test is successful
# 重启
[root@localhost etc]# /etc/init.d/php-fpm restart
Gracefully shutting down php-fpm . done
Starting php-fpm done
# 看到出现了新的pool
[root@localhost etc]# ps -aux |grep php
root 2997 0.4 0.2 231720 4880 ? Ss 07:14 0:00php-fpm: master process (/usr/local/php-fpm/etc/php-fpm.conf)
php-fpm 2998 0.0 0.2 231660 4608 ? S 07:14 0:00php-fpm: pool www
php-fpm 2999 0.0 0.2 231660 4608 ? S 07:14 0:00php-fpm: pool www
php-fpm 3000 0.0 0.2 231660 4608 ? S 07:14 0:00php-fpm: pool www
php-fpm 3001 0.0 0.2 231660 4608 ? S 07:14 0:00php-fpm: pool www
php-fpm 3002 0.0 0.2 231660 4612 ? S 07:14 0:00php-fpm: pool www
php-fpm 3003 0.0 0.2 231660 4612 ? S 07:14 0:00php-fpm: pool www
php-fpm 3004 0.0 0.2 231660 4612 ? S 07:14 0:00php-fpm: pool www
php-fpm 3005 0.0 0.2 231660 4612 ? S 07:14 0:00php-fpm: pool www
php-fpm 3006 0.0 0.2 231660 4616 ? S 07:14 0:00php-fpm: pool www
php-fpm 3007 0.0 0.2 231660 4616 ? S 07:14 0:00php-fpm: pool www
php-fpm 3008 0.0 0.2 231660 4616 ? S 07:14 0:00php-fpm: pool www
php-fpm 3009 0.0 0.2 231660 4616 ? S 07:14 0:00php-fpm: pool www
php-fpm 3010 0.0 0.2 231660 4616 ? S 07:14 0:00php-fpm: pool www
php-fpm 3011 0.0 0.2 231660 4616 ? S 07:14 0:00php-fpm: pool www
php-fpm 3012 0.0 0.2 231660 4616 ? S 07:14 0:00php-fpm: pool www
php-fpm 3013 0.0 0.2 231660 4616 ? S 07:14 0:00php-fpm: pool www
php-fpm 3014 0.0 0.2 231660 4616 ? S 07:14 0:00php-fpm: pool www
php-fpm 3015 0.0 0.2 231660 4616 ? S 07:14 0:00php-fpm: pool www
php-fpm 3016 0.0 0.2 231660 4616 ? S 07:14 0:00php-fpm: pool www
php-fpm 3017 0.0 0.2 231660 4616 ? S 07:14 0:00php-fpm: pool www
php-fpm 3018 0.2 0.2 231660 4612 ? S 07:14 0:00php-fpm: pool 123.com
php-fpm 3019 0.0 0.2 231660 4612 ? S 07:14 0:00php-fpm: pool 123.com
php-fpm 3020 0.0 0.2 231660 4612 ? S 07:14 0:00php-fpm: pool 123.com
php-fpm 3021 0.0 0.2 231660 4612 ? S 07:14 0:00php-fpm: pool 123.com
php-fpm 3022 0.0 0.2 231660 4620 ? S 07:14 0:00php-fpm: pool 123.com
php-fpm 3023 0.0 0.2 231660 4620 ? S 07:14 0:00php-fpm: pool 123.com
php-fpm 3024 0.0 0.2 231660 4620 ? S 07:14 0:00php-fpm: pool 123.com
php-fpm 3025 0.0 0.2 231660 4620 ? S 07:14 0:00php-fpm: pool 123.com
php-fpm 3026 0.0 0.2 231660 4620 ? S 07:14 0:00php-fpm: pool 123.com
php-fpm 3027 0.0 0.2 231660 4620 ? S 07:14 0:00php-fpm: pool 123.com
php-fpm 3028 0.0 0.2 231660 4620 ? S 07:14 0:00php-fpm: pool 123.com
php-fpm 3029 0.0 0.2 231660 4620 ? S 07:14 0:00php-fpm: pool 123.com
php-fpm 3030 0.0 0.2 231660 4620 ? S 07:14 0:00php-fpm: pool 123.com
php-fpm 3031 0.0 0.2 231660 4620 ? S 07:14 0:00php-fpm: pool 123.com
php-fpm 3032 0.0 0.2 231660 4620 ? S 07:14 0:00php-fpm: pool 123.com
php-fpm 3033 0.0 0.2 231660 4620 ? S 07:14 0:00php-fpm: pool 123.com
php-fpm 3034 0.0 0.2 231660 4620 ? S 07:14 0:00php-fpm: pool 123.com
php-fpm 3035 0.0 0.2 231660 4620 ? S 07:14 0:00php-fpm: pool 123.com
php-fpm 3036 0.0 0.2 231660 4620 ? S 07:14 0:00php-fpm: pool 123.com
php-fpm 3037 0.0 0.2 231660 4620 ? S 07:14 0:00php-fpm: pool 123.com
root 3039 0.0 0.0 112820 968 pts/1 S+ 07:14 0:00 grep --color=auto php
[root@localhost etc]# cd /usr/local/nginx/conf/vhost/
#编辑文件
[root@localhost vhost]# vim default.conf
server
{
listen 80 default_server;
server_name aaa.com;
index index.html index.htm index.php;
root /data/nginx/default;
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/tmp/123.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /data/nginx/test.com$fastcgi_script_name;
}
}
# fastcgi_pass unix:/tmp/123.sock; 主要就是修改这一行配置文件选择不同的pool。
#检查文件是否出错并重新加载配置文件
[root@localhost vhost]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@localhost vhost]# /usr/local/nginx/sbin/nginx -s reload
配置拆分多个pool
在nginx.conf这个配置文件下有一行配置文件为 include vhost/*.conf; 他的作用为识别指定目录下以conf为结尾的配置文件,让每个站点为一个配置文件。
# 进入配置文件目录
[root@localhost vhost]# cd /usr/local/php-fpm/etc/
# 加入一行include
[root@localhost etc]# vim php-fpm.conf
[global]
pid = /usr/local/php-fpm/var/run/php-fpm.pid
error_log = /usr/local/php-fpm/var/log/php-fpm.log
include = etc/php-fpm.d/*.conf
# 创建存放配置文件的目录
[root@localhost etc]# mkdir php-fpm.d
[root@localhost etc]# cd php-fpm.d/
[root@localhost php-fpm.d]# vim 123.conf
[123.com]
listen = /tmp/123.sock
listen.mode = 666
user = php-fpm
group = php-fpm
pm = dynamic
pm.max_children = 50
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500
rlimit_files = 1024
[root@localhost php-fpm.d]# vim www.conf
[www]
listen = /tmp/php-fcgi.sock
listen.mode = 666
user = php-fpm
group = php-fpm
pm = dynamic
pm.max_children = 50
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500
rlimit_files = 1024
#检查文件是否出错
[root@localhost php-fpm.d]# /usr/local/php-fpm/sbin/php-fpm -t
[19-Aug-2021 07:40:02] NOTICE: configuration file /usr/local/php-fpm/etc/php-fpm.conf
test is successful
# 重启服务
[root@localhost php-fpm.d]# /etc/init.d/php-fpm restart
Gracefully shutting down php-fpm . done
Starting php-fpm done
# 查看一下sock文件
[root@localhost php-fpm.d]# ls /tmp/*.sock
/tmp/123.sock /tmp/mysql.sock /tmp/php-fcgi.sock
#查看PHP进程
[root@localhost php-fpm.d]# ps -ef |grep php
root 3075 1 0 07:40 ? 00:00:00 php-fpm: master process (/usr/local/php-fpm/etc/php-fpm.conf)
php-fpm 3076 3075 0 07:40 ? 00:00:00 php-fpm: pool 123.com
php-fpm 3077 3075 0 07:40 ? 00:00:00 php-fpm: pool 123.com
php-fpm 3078 3075 0 07:40 ? 00:00:00 php-fpm: pool 123.com
php-fpm 3079 3075 0 07:40 ? 00:00:00 php-fpm: pool 123.com
php-fpm 3080 3075 0 07:40 ? 00:00:00 php-fpm: pool 123.com
php-fpm 3081 3075 0 07:40 ? 00:00:00 php-fpm: pool 123.com
php-fpm 3082 3075 0 07:40 ? 00:00:00 php-fpm: pool 123.com
php-fpm 3083 3075 0 07:40 ? 00:00:00 php-fpm: pool 123.com
php-fpm 3084 3075 0 07:40 ? 00:00:00 php-fpm: pool 123.com
php-fpm 3085 3075 0 07:40 ? 00:00:00 php-fpm: pool 123.com
php-fpm 3086 3075 0 07:40 ? 00:00:00 php-fpm: pool 123.com
php-fpm 3087 3075 0 07:40 ? 00:00:00 php-fpm: pool 123.com
php-fpm 3088 3075 0 07:40 ? 00:00:00 php-fpm: pool 123.com
php-fpm 3089 3075 0 07:40 ? 00:00:00 php-fpm: pool 123.com
php-fpm 3090 3075 0 07:40 ? 00:00:00 php-fpm: pool 123.com
php-fpm 3091 3075 0 07:40 ? 00:00:00 php-fpm: pool 123.com
php-fpm 3092 3075 0 07:40 ? 00:00:00 php-fpm: pool 123.com
php-fpm 3093 3075 0 07:40 ? 00:00:00 php-fpm: pool 123.com
php-fpm 3094 3075 0 07:40 ? 00:00:00 php-fpm: pool 123.com
php-fpm 3095 3075 0 07:40 ? 00:00:00 php-fpm: pool 123.com
php-fpm 3096 3075 0 07:40 ? 00:00:00 php-fpm: pool www
php-fpm 3097 3075 0 07:40 ? 00:00:00 php-fpm: pool www
php-fpm 3098 3075 0 07:40 ? 00:00:00 php-fpm: pool www
php-fpm 3099 3075 0 07:40 ? 00:00:00 php-fpm: pool www
php-fpm 3100 3075 0 07:40 ? 00:00:00 php-fpm: pool www
php-fpm 3101 3075 0 07:40 ? 00:00:00 php-fpm: pool www
php-fpm 3102 3075 0 07:40 ? 00:00:00 php-fpm: pool www
php-fpm 3103 3075 0 07:40 ? 00:00:00 php-fpm: pool www
php-fpm 3104 3075 0 07:40 ? 00:00:00 php-fpm: pool www
php-fpm 3105 3075 0 07:40 ? 00:00:00 php-fpm: pool www
php-fpm 3106 3075 0 07:40 ? 00:00:00 php-fpm: pool www
php-fpm 3107 3075 0 07:40 ? 00:00:00 php-fpm: pool www
php-fpm 3108 3075 0 07:40 ? 00:00:00 php-fpm: pool www
php-fpm 3109 3075 0 07:40 ? 00:00:00 php-fpm: pool www
php-fpm 3110 3075 0 07:40 ? 00:00:00 php-fpm: pool www
php-fpm 3111 3075 0 07:40 ? 00:00:00 php-fpm: pool www
php-fpm 3112 3075 0 07:40 ? 00:00:00 php-fpm: pool www
php-fpm 3113 3075 0 07:40 ? 00:00:00 php-fpm: pool www
php-fpm 3114 3075 0 07:40 ? 00:00:00 php-fpm: pool www
php-fpm 3115 3075 0 07:40 ? 00:00:00 php-fpm: pool www
root 3118 2900 0 07:40 pts/1 00:00:00 grep --color=auto php
php-fpm查看慢执行日志
通过配置慢执行日志,可以让我们清晰的了解到PHP脚本在哪里执行时间长,可以定位到哪一行。
# 添加两行配置文件
[root@localhost php-fpm.d]# vim /usr/local/php-fpm/etc/php-fpm.d/www.conf
request_slowlog_timeout = 1
slowlog = /usr/local/php-fpm/var/log/www-slow.log
[root@localhost php-fpm.d]# /usr/local/php-fpm/sbin/php-fpm -t
[19-Aug-2021 10:09:00] NOTICE: configuration file /usr/local/php-fpm/etc/php-fpm.conf
test is successful
# 重载PHP服务
[root@localhost php-fpm.d]# /etc/init.d/php-fpm reload
Reload service php-fpm done
# 查看日志目录,可以看到我们配置的路径已经多了一个
[root@localhost php-fpm.d]# ls /usr/local/php-fpm/var/log/
php-fpm.log www-slow.log
# 现在的www-slow.log还是一个空文件。只会记录执行时间大于1s的日志
[root@localhost php-fpm.d]# cat /usr/local/php-fpm/var/log/www-slow.log
# 编辑一个慢执行文件
[root@localhost php-fpm.d]# vim /data/nginx/test.com/sleep.php
<?php
echo "test slow log";
sleep(2);
echo "done";
?>
# 执行这个脚本的时候可以明显看到慢了一下。
[root@localhost php-fpm.d]# curl -x127.0.0.1:80 test.com/sleep.php
test slow logdone[root@lnmp php-fpm.d]#
# 可以看到日志多出一行。说哪个文件,第三行 sellp()问题。
[root@localhost php-fpm.d]# cat /usr/local/php-fpm/var/log/www-slow.log
[19-Aug-2021 10:27:09] [pool www] pid 3243
script_filename = /data/nginx/test.com/sleep.php
[0x00007feda8c3c288] sleep() /data/nginx/test.com/sleep.php:3
php-fpm定义open_basedir
open_basedir目的就是安全,httpd可以针对每个虚拟机设置一个open_basedir
php-fpm同样也可以对不同的pool设置的不同的open_basedir
# 修改配置文件,特意配置为错误路径
# 添加一行配置文件,其中test.com的路径为错误路径
[root@localhost php-fpm.d]# vim /usr/local/php-fpm/etc/php-fpm.d/www.conf
php_admin_value[open_basedir]=/data/nginx/wwwtest.com:/tmp/
#重新启动
[root@localhost php-fpm.d]# /etc/init.d/php-fpm restart
Gracefully shutting down php-fpm . done
Starting php-fpm done
# 测试发现这些PHP文件都无法访问,就是因为php open_basedir做了限制。
[root@localhost php-fpm.d]# ls /data/nginx/test.com/
1.js 1.jss 2.jpg 2.js 3.php admin index.html sleep.php
[root@localhost php-fpm.d]# curl -x127.0.0.1:80 test.com/sleep.php -I
HTTP/1.1 404 Not Found
Server: nginx/1.17.8
Date: Thu, 19 Aug 2021 02:51:12 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By: PHP/5.6.30
[root@localhost php-fpm.d]# curl -x127.0.0.1:80 test.com/3.php -I
HTTP/1.1 404 Not Found
Server: nginx/1.17.8
Date: Thu, 19 Aug 2021 02:51:45 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By: PHP/5.6.30
# 把配置文件改为正确的
# 发现可以正常使用
[root@localhost php-fpm.d]# vim /usr/local/php-fpm/etc/php-fpm.d/www.conf
php_admin_value[open_basedir]=/data/nginx/test.com:/tmp/
#重新启动
[root@localhost php-fpm.d]# /etc/init.d/php-fpm restart
Gracefully shutting down php-fpm . done
Starting php-fpm done
#进行测试
[root@localhost php-fpm.d]# curl -x127.0.0.1:80 test.com/3.php -I
HTTP/1.1 200 OK
Server: nginx/1.17.8
Date: Thu, 19 Aug 2021 02:57:52 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By: PHP/5.6.30
[root@localhost php-fpm.d]# curl -x127.0.0.1:80 test.com/sleep.php -I
HTTP/1.1 200 OK
Server: nginx/1.17.8
Date: Thu, 19 Aug 2021 02:58:00 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By: PHP/5.6.30
配置错误日志
配置记录php执行错误的日志
# 配置
[root@localhost php-fpm.d]# vim /usr/local/php-fpm/etc/php.ini
display_errors = Off
log_errors = On
error_log = /usr/local/php-fpm/var/log/php_error.log
;error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
error_reporting = E_ALL
# 再次将php的配置文件改错
[root@localhost php-fpm.d]# vim /usr/local/php-fpm/etc/php-fpm.d/www.conf
php_admin_value[open_basedir]=/data/nginx/wwwtest.com:/tmp/
# 创建一个日志文件,并授权。
[root@lnmp php-fpm.d]# touch /usr/local/php-fpm/var/log/php_error.log
[root@lnmp php-fpm.d]# chmod 777 /usr/local/php-fpm/var/log/php_error.log
[root@localhost log]# ls -al
total 8
drwxr-xr-x. 2 root root 63 Sep 6 14:44 .
drwxr-xr-x. 4 root root 26 Sep 3 12:39 ..
-rwxrwxrwx 1 root root 0 Sep 6 14:44 php_error.log
-rw-------. 1 root root 3515 Sep 6 14:23 php-fpm.log
-rw------- 1 root root 312 Sep 6 14:23 www-slow.log
# 重启
[root@localhost log]# /etc/init.d/php-fpm restart
Gracefully shutting down php-fpm . done
Starting php-fpm done
# 查看
[root@localhost php-fpm.d]# curl -x127.0.0.1:80 test.com/3.php -I
HTTP/1.1 404 Not Found
Server: nginx/1.17.8
Date: Thu, 19 Aug 2021 03:21:22 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By: PHP/5.6.30
[root@localhost php-fpm.d]# curl -x127.0.0.1:80 test.com/sleep.php -I
HTTP/1.1 404 Not Found
Server: nginx/1.17.8
Date: Thu, 19 Aug 2021 03:21:32 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By: PHP/5.6.30
[root@localhost php-fpm.d]# curl -x127.0.0.1:80 test.com/sleep.php
No input file specified.
# 查看错误日志,显示open_basedir限制生效,目录不能访问
[root@lnmp php-fpm.d]# cat /usr/local/php-fpm/var/log/php_error.log
[19-Aug-2021 03:21:22 UTC] PHP Warning: Unknown: open_basedir restriction in effect. File(/data/nginx/test.com/3.php) is not within the allowed path(s): (/data/nginx/wwwtest.com:/tmp/) in Unknown on line 0
[19-Aug-2021 03:21:22 UTC] PHP Warning: Unknown: failed to open stream: Operation not permitted in Unknown on line 0
[19-Aug-2021 03:21:32 UTC] PHP Warning: Unknown: open_basedir restriction in effect. File(/data/nginx/test.com/sleep.php) is not within the allowed path(s): (/data/nginx/wwwtest.com:/tmp/) in Unknown on line 0
[19-Aug-2021 03:21:32 UTC] PHP Warning: Unknown: failed to open stream: Operation not permitted in Unknown on line 0
[19-Aug-2021 03:21:45 UTC] PHP Warning: Unknown: open_basedir restriction in effect. File(/data/nginx/test.com/sleep.php) is not within the allowed path(s): (/data/nginx/wwwtest.com:/tmp/) in Unknown on line 0
[19-Aug-2021 03:21:45 UTC] PHP Warning: Unknown: failed to open stream: Operation not permitted in Unknown on line 0
# 再次将配置文件修改回来
[root@vlocalhost php-fpm.d]# cat /usr/local/php-fpm/etc/php-fpm.d/www.conf
[www]
listen = /tmp/php-fcgi.sock
listen.mode = 666
user = php-fpm
group = php-fpm
pm = dynamic
pm.max_children = 50
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500
rlimit_files = 1024
request_slowlog_timeout = 1
slowlog = /usr/local/php-fpm/var/log/www-slow.log
php_admin_value[open_basedir]=/data/nginx/test.com:/tmp/
# 重启服务,可以正常使用,也没有产生错误日志。
[root@localhost php-fpm.d]# /etc/init.d/php-fpm restart
Gracefully shutting down php-fpm . done
Starting php-fpm done
[root@localhost php-fpm.d]# curl -x127.0.0.1:80 test.com/sleep.php -I
HTTP/1.1 200 OK
Server: nginx/1.17.8
Date: Thu, 19 Aug 2021 03:25:43 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By: PHP/5.6.30
[root@localhost php-fpm.d]# curl -x127.0.0.1:80 test.com/3.php -I
HTTP/1.1 200 OK
Server: nginx/1.17.8
Date: Thu, 19 Aug 2021 03:25:50 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By: PHP/5.6.30
五、php-fpm进程管理
pm = dynamic //动态进程管理,也可以是static 如果是静态的,会直接启动最大子进程数
pm.max_children = 50 //最大子进程数,ps aux可以查看
pm.start_servers = 20 //启动服务时会启动的进程数
pm.min_spare_servers = 5 //定义在空闲时段,子进程数的最少数量,如果达到这个数值时,php-fpm服务会自动派生新的子进程。
pm.max_spare_servers = 35 //定义在空闲时段,子进程数的最大值,如果高于这个数值就开始清理空闲的子进程。
pm.max_requests = 500 //定义一个子进程最多处理的请求数,也就是说在一个php-fpm的子进程最多可以处理这么多请求,当达到这个数值时,它会自动退出。