一、.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]# lslibmcrypt-2.5.7 nginx-1.17.8.tar.gzlibmcrypt-2.5.7.tar.gz php-5.6.30mysql-5.6.47-linux-glibc2.12-x86_64.tar.gz php-5.6.30.tar.gznginx-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 -latotal 2drwxr-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.cnfcp: overwrite ‘/etc/my.cnf’? y[root@localhost mysql]# vim /etc/my.cnfbasedir = /usr/local/mysqldatadir = /data/mysqlport = 3306server_id = 29socket = /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/mysqldbasedir=/usr/local/mysqldatadir=/data/mysql[root@localhost mysql]# chkconfig --add mysqld[root@localhost mysql]# chkconfig mysql on[root@localhost mysql]# service mysqld startStarting MySQL. SUCCESS![root@localhost mysql]# netstat -ntlpActive Internet connections (only servers)Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program nametcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1462/sshdtcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 2605/mastertcp6 0 0 :::3306 :::* LISTEN 7891/mysqldtcp6 0 0 :::22 :::* LISTEN 1462/sshdtcp6 0 0 ::1:25 :::* LISTEN 2605/master
三、安装与配置PHP
1.安装PHP
[root@localhost src]# cd /usr/local/src/#上传二进制编译包至虚拟机[root@localhost src]# lsmysql-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.specconfig.status: creating main/build-defs.hconfig.status: creating scripts/phpizeconfig.status: creating scripts/man1/phpize.1config.status: creating scripts/php-configconfig.status: creating scripts/man1/php-config.1config.status: creating sapi/cli/php.1config.status: creating sapi/fpm/php-fpm.confconfig.status: creating sapi/fpm/init.d.php-fpmconfig.status: creating sapi/fpm/php-fpm.serviceconfig.status: creating sapi/fpm/php-fpm.8config.status: creating sapi/fpm/status.htmlconfig.status: creating sapi/cgi/php-cgi.1config.status: creating ext/phar/phar.1config.status: creating ext/phar/phar.phar.1config.status: creating main/php_config.hconfig.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 operationcollect2: error: ld returned 1 exit statusmake: *** [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.piderror_log = /usr/local/php-fpm/var/log/php-fpm.log[www]listen = /tmp/php-fcgi.socklisten.mode = 666user = php-fpmgroup = php-fpmpm = dynamicpm.max_children = 50pm.start_servers = 20pm.min_spare_servers = 5pm.max_spare_servers = 35pm.max_requests = 500rlimit_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 startStarting php-fpm done#设置开机自启[root@localhost php-5.6.30]# chkconfig php-fpm on#测试[root@localhost php-5.6.30]# ps aux |grep php-fpmroot 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 wwwphp-fpm 104941 0.0 0.2 127964 4592 ? S 21:26 0:00php-fpm: pool wwwphp-fpm 104942 0.0 0.2 127964 4596 ? S 21:26 0:00php-fpm: pool wwwphp-fpm 104943 0.0 0.2 127964 4596 ? S 21:26 0:00php-fpm: pool wwwphp-fpm 104944 0.0 0.2 127964 4600 ? S 21:26 0:00php-fpm: pool wwwphp-fpm 104945 0.0 0.2 127964 4600 ? S 21:26 0:00php-fpm: pool wwwphp-fpm 104946 0.0 0.2 127964 4600 ? S 21:26 0:00php-fpm: pool wwwphp-fpm 104947 0.0 0.2 127964 4600 ? S 21:26 0:00php-fpm: pool wwwphp-fpm 104948 0.0 0.2 127964 4600 ? S 21:26 0:00php-fpm: pool wwwphp-fpm 104949 0.0 0.2 127964 4600 ? S 21:26 0:00php-fpm: pool wwwphp-fpm 104950 0.0 0.2 127964 4600 ? S 21:26 0:00php-fpm: pool wwwphp-fpm 104951 0.0 0.2 127964 4600 ? S 21:26 0:00php-fpm: pool wwwphp-fpm 104952 0.0 0.2 127964 4600 ? S 21:26 0:00php-fpm: pool wwwphp-fpm 104953 0.0 0.2 127964 4600 ? S 21:26 0:00php-fpm: pool wwwphp-fpm 104954 0.0 0.2 127964 4600 ? S 21:26 0:00php-fpm: pool wwwphp-fpm 104955 0.0 0.2 127964 4600 ? S 21:26 0:00php-fpm: pool wwwphp-fpm 104956 0.0 0.2 127964 4600 ? S 21:26 0:00php-fpm: pool wwwphp-fpm 104957 0.0 0.2 127964 4600 ? S 21:26 0:00php-fpm: pool wwwphp-fpm 104958 0.0 0.2 127964 4604 ? S 21:26 0:00php-fpm: pool wwwphp-fpm 104959 0.0 0.2 127964 4604 ? S 21:26 0:00php-fpm: pool wwwroot 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]# lsmysql-5.6.47-linux-glibc2.12-x86_64.tar.gz php-5.6.30nginx-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/nginxConfiguration summary+ using system PCRE library+ OpenSSL library is not used+ using system zlib librarynginx 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 SettingsNGINX_SBIN="/usr/local/nginx/sbin/nginx"NGINX_CONF="/usr/local/nginx/conf/nginx.conf"NGINX_PID="/usr/local/nginx/logs/nginx.pid"RETVAL=0prog="Nginx"start(){echo -n $"Starting $prog: "mkdir -p /dev/shm/nginx_tempdaemon $NGINX_SBIN -c $NGINX_CONFRETVAL=$?echoreturn $RETVAL}stop(){echo -n $"Stopping $prog: "killproc -p $NGINX_PID $NGINX_SBIN -TERMrm -rf /dev/shm/nginx_tempRETVAL=$?echoreturn $RETVAL}reload(){echo -n $"Reloading $prog: "killproc -p $NGINX_PID $NGINX_SBIN -HUPRETVAL=$?echoreturn $RETVAL}restart(){stopstart}configtest(){$NGINX_SBIN -c $NGINX_CONF -treturn 0}case "$1" instart)start;;stop)stop;;reload)reload;;restart)restart;;configtest)configtest;;*)echo $"Usage: $0 {start|stop|reload|restart|configtest}"RETVAL=1esacexit $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 -altotal 56drwxr-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.confuser 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/htmapplication/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 -tnginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is oknginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful# 启动服务[root@localhost nginx-1.17.8]# service nginx startStarting nginx (via systemctl): [ OK ]#检查进程[root@localhost nginx-1.17.8]# ps aux |grep nginxroot 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.confnobody 107676 0.0 0.1 22968 3188 ? S 22:46 0:00nginx: worker processnobody 107677 0.0 0.1 22968 3188 ? S 22:46 0:00nginx: worker processroot 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 -ntlpActive Internet connections (only servers)Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program nametcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 107675/nginx: mastetcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1462/sshdtcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 2605/mastertcp6 0 0 :::3306 :::* LISTEN 7891/mysqldtcp6 0 0 :::22 :::* LISTEN 1462/sshdtcp6 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 andworking. 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<?phpecho "test php scripts"?>[root@localhost nginx-1.17.8]# curl localhost/1.phptest 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 phproot 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 wwwphp-fpm 1211 1195 0 02:15 ? 00:00:00 php-fpm: pool wwwphp-fpm 1212 1195 0 02:15 ? 00:00:00 php-fpm: pool wwwphp-fpm 1213 1195 0 02:15 ? 00:00:00 php-fpm: pool wwwphp-fpm 1214 1195 0 02:15 ? 00:00:00 php-fpm: pool wwwphp-fpm 1215 1195 0 02:15 ? 00:00:00 php-fpm: pool wwwphp-fpm 1216 1195 0 02:15 ? 00:00:00 php-fpm: pool wwwphp-fpm 1219 1195 0 02:15 ? 00:00:00 php-fpm: pool wwwphp-fpm 1220 1195 0 02:15 ? 00:00:00 php-fpm: pool wwwphp-fpm 1221 1195 0 02:15 ? 00:00:00 php-fpm: pool wwwphp-fpm 1222 1195 0 02:15 ? 00:00:00 php-fpm: pool wwwphp-fpm 1228 1195 0 02:15 ? 00:00:00 php-fpm: pool wwwphp-fpm 1229 1195 0 02:15 ? 00:00:00 php-fpm: pool wwwphp-fpm 1230 1195 0 02:15 ? 00:00:00 php-fpm: pool wwwphp-fpm 1231 1195 0 02:15 ? 00:00:00 php-fpm: pool wwwphp-fpm 1232 1195 0 02:15 ? 00:00:00 php-fpm: pool wwwphp-fpm 1233 1195 0 02:15 ? 00:00:00 php-fpm: pool wwwphp-fpm 1234 1195 0 02:15 ? 00:00:00 php-fpm: pool wwwphp-fpm 1235 1195 0 02:15 ? 00:00:00 php-fpm: pool wwwphp-fpm 1238 1195 0 02:15 ? 00:00:00 php-fpm: pool wwwroot 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.piderror_log = /usr/local/php-fpm/var/log/php-fpm.log[www]listen = /tmp/php-fcgi.socklisten.mode = 666user = php-fpmgroup = php-fpmpm = dynamicpm.max_children = 50pm.start_servers = 20pm.min_spare_servers = 5pm.max_spare_servers = 35pm.max_requests = 500rlimit_files = 1024[123.com]listen = /tmp/123.socklisten.mode = 666user = php-fpmgroup = php-fpmpm = dynamicpm.max_children = 50pm.start_servers = 20pm.min_spare_servers = 5pm.max_spare_servers = 35pm.max_requests = 500rlimit_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 restartGracefully shutting down php-fpm . doneStarting php-fpm done# 看到出现了新的pool[root@localhost etc]# ps -aux |grep phproot 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 wwwphp-fpm 2999 0.0 0.2 231660 4608 ? S 07:14 0:00php-fpm: pool wwwphp-fpm 3000 0.0 0.2 231660 4608 ? S 07:14 0:00php-fpm: pool wwwphp-fpm 3001 0.0 0.2 231660 4608 ? S 07:14 0:00php-fpm: pool wwwphp-fpm 3002 0.0 0.2 231660 4612 ? S 07:14 0:00php-fpm: pool wwwphp-fpm 3003 0.0 0.2 231660 4612 ? S 07:14 0:00php-fpm: pool wwwphp-fpm 3004 0.0 0.2 231660 4612 ? S 07:14 0:00php-fpm: pool wwwphp-fpm 3005 0.0 0.2 231660 4612 ? S 07:14 0:00php-fpm: pool wwwphp-fpm 3006 0.0 0.2 231660 4616 ? S 07:14 0:00php-fpm: pool wwwphp-fpm 3007 0.0 0.2 231660 4616 ? S 07:14 0:00php-fpm: pool wwwphp-fpm 3008 0.0 0.2 231660 4616 ? S 07:14 0:00php-fpm: pool wwwphp-fpm 3009 0.0 0.2 231660 4616 ? S 07:14 0:00php-fpm: pool wwwphp-fpm 3010 0.0 0.2 231660 4616 ? S 07:14 0:00php-fpm: pool wwwphp-fpm 3011 0.0 0.2 231660 4616 ? S 07:14 0:00php-fpm: pool wwwphp-fpm 3012 0.0 0.2 231660 4616 ? S 07:14 0:00php-fpm: pool wwwphp-fpm 3013 0.0 0.2 231660 4616 ? S 07:14 0:00php-fpm: pool wwwphp-fpm 3014 0.0 0.2 231660 4616 ? S 07:14 0:00php-fpm: pool wwwphp-fpm 3015 0.0 0.2 231660 4616 ? S 07:14 0:00php-fpm: pool wwwphp-fpm 3016 0.0 0.2 231660 4616 ? S 07:14 0:00php-fpm: pool wwwphp-fpm 3017 0.0 0.2 231660 4616 ? S 07:14 0:00php-fpm: pool wwwphp-fpm 3018 0.2 0.2 231660 4612 ? S 07:14 0:00php-fpm: pool 123.comphp-fpm 3019 0.0 0.2 231660 4612 ? S 07:14 0:00php-fpm: pool 123.comphp-fpm 3020 0.0 0.2 231660 4612 ? S 07:14 0:00php-fpm: pool 123.comphp-fpm 3021 0.0 0.2 231660 4612 ? S 07:14 0:00php-fpm: pool 123.comphp-fpm 3022 0.0 0.2 231660 4620 ? S 07:14 0:00php-fpm: pool 123.comphp-fpm 3023 0.0 0.2 231660 4620 ? S 07:14 0:00php-fpm: pool 123.comphp-fpm 3024 0.0 0.2 231660 4620 ? S 07:14 0:00php-fpm: pool 123.comphp-fpm 3025 0.0 0.2 231660 4620 ? S 07:14 0:00php-fpm: pool 123.comphp-fpm 3026 0.0 0.2 231660 4620 ? S 07:14 0:00php-fpm: pool 123.comphp-fpm 3027 0.0 0.2 231660 4620 ? S 07:14 0:00php-fpm: pool 123.comphp-fpm 3028 0.0 0.2 231660 4620 ? S 07:14 0:00php-fpm: pool 123.comphp-fpm 3029 0.0 0.2 231660 4620 ? S 07:14 0:00php-fpm: pool 123.comphp-fpm 3030 0.0 0.2 231660 4620 ? S 07:14 0:00php-fpm: pool 123.comphp-fpm 3031 0.0 0.2 231660 4620 ? S 07:14 0:00php-fpm: pool 123.comphp-fpm 3032 0.0 0.2 231660 4620 ? S 07:14 0:00php-fpm: pool 123.comphp-fpm 3033 0.0 0.2 231660 4620 ? S 07:14 0:00php-fpm: pool 123.comphp-fpm 3034 0.0 0.2 231660 4620 ? S 07:14 0:00php-fpm: pool 123.comphp-fpm 3035 0.0 0.2 231660 4620 ? S 07:14 0:00php-fpm: pool 123.comphp-fpm 3036 0.0 0.2 231660 4620 ? S 07:14 0:00php-fpm: pool 123.comphp-fpm 3037 0.0 0.2 231660 4620 ? S 07:14 0:00php-fpm: pool 123.comroot 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.confserver{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 -tnginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is oknginx: 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.piderror_log = /usr/local/php-fpm/var/log/php-fpm.loginclude = 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.socklisten.mode = 666user = php-fpmgroup = php-fpmpm = dynamicpm.max_children = 50pm.start_servers = 20pm.min_spare_servers = 5pm.max_spare_servers = 35pm.max_requests = 500rlimit_files = 1024[root@localhost php-fpm.d]# vim www.conf[www]listen = /tmp/php-fcgi.socklisten.mode = 666user = php-fpmgroup = php-fpmpm = dynamicpm.max_children = 50pm.start_servers = 20pm.min_spare_servers = 5pm.max_spare_servers = 35pm.max_requests = 500rlimit_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.conftest is successful# 重启服务[root@localhost php-fpm.d]# /etc/init.d/php-fpm restartGracefully shutting down php-fpm . doneStarting 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 phproot 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.comphp-fpm 3077 3075 0 07:40 ? 00:00:00 php-fpm: pool 123.comphp-fpm 3078 3075 0 07:40 ? 00:00:00 php-fpm: pool 123.comphp-fpm 3079 3075 0 07:40 ? 00:00:00 php-fpm: pool 123.comphp-fpm 3080 3075 0 07:40 ? 00:00:00 php-fpm: pool 123.comphp-fpm 3081 3075 0 07:40 ? 00:00:00 php-fpm: pool 123.comphp-fpm 3082 3075 0 07:40 ? 00:00:00 php-fpm: pool 123.comphp-fpm 3083 3075 0 07:40 ? 00:00:00 php-fpm: pool 123.comphp-fpm 3084 3075 0 07:40 ? 00:00:00 php-fpm: pool 123.comphp-fpm 3085 3075 0 07:40 ? 00:00:00 php-fpm: pool 123.comphp-fpm 3086 3075 0 07:40 ? 00:00:00 php-fpm: pool 123.comphp-fpm 3087 3075 0 07:40 ? 00:00:00 php-fpm: pool 123.comphp-fpm 3088 3075 0 07:40 ? 00:00:00 php-fpm: pool 123.comphp-fpm 3089 3075 0 07:40 ? 00:00:00 php-fpm: pool 123.comphp-fpm 3090 3075 0 07:40 ? 00:00:00 php-fpm: pool 123.comphp-fpm 3091 3075 0 07:40 ? 00:00:00 php-fpm: pool 123.comphp-fpm 3092 3075 0 07:40 ? 00:00:00 php-fpm: pool 123.comphp-fpm 3093 3075 0 07:40 ? 00:00:00 php-fpm: pool 123.comphp-fpm 3094 3075 0 07:40 ? 00:00:00 php-fpm: pool 123.comphp-fpm 3095 3075 0 07:40 ? 00:00:00 php-fpm: pool 123.comphp-fpm 3096 3075 0 07:40 ? 00:00:00 php-fpm: pool wwwphp-fpm 3097 3075 0 07:40 ? 00:00:00 php-fpm: pool wwwphp-fpm 3098 3075 0 07:40 ? 00:00:00 php-fpm: pool wwwphp-fpm 3099 3075 0 07:40 ? 00:00:00 php-fpm: pool wwwphp-fpm 3100 3075 0 07:40 ? 00:00:00 php-fpm: pool wwwphp-fpm 3101 3075 0 07:40 ? 00:00:00 php-fpm: pool wwwphp-fpm 3102 3075 0 07:40 ? 00:00:00 php-fpm: pool wwwphp-fpm 3103 3075 0 07:40 ? 00:00:00 php-fpm: pool wwwphp-fpm 3104 3075 0 07:40 ? 00:00:00 php-fpm: pool wwwphp-fpm 3105 3075 0 07:40 ? 00:00:00 php-fpm: pool wwwphp-fpm 3106 3075 0 07:40 ? 00:00:00 php-fpm: pool wwwphp-fpm 3107 3075 0 07:40 ? 00:00:00 php-fpm: pool wwwphp-fpm 3108 3075 0 07:40 ? 00:00:00 php-fpm: pool wwwphp-fpm 3109 3075 0 07:40 ? 00:00:00 php-fpm: pool wwwphp-fpm 3110 3075 0 07:40 ? 00:00:00 php-fpm: pool wwwphp-fpm 3111 3075 0 07:40 ? 00:00:00 php-fpm: pool wwwphp-fpm 3112 3075 0 07:40 ? 00:00:00 php-fpm: pool wwwphp-fpm 3113 3075 0 07:40 ? 00:00:00 php-fpm: pool wwwphp-fpm 3114 3075 0 07:40 ? 00:00:00 php-fpm: pool wwwphp-fpm 3115 3075 0 07:40 ? 00:00:00 php-fpm: pool wwwroot 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.confrequest_slowlog_timeout = 1slowlog = /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.conftest is successful# 重载PHP服务[root@localhost php-fpm.d]# /etc/init.d/php-fpm reloadReload 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<?phpecho "test slow log";sleep(2);echo "done";?># 执行这个脚本的时候可以明显看到慢了一下。[root@localhost php-fpm.d]# curl -x127.0.0.1:80 test.com/sleep.phptest 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 3243script_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.confphp_admin_value[open_basedir]=/data/nginx/wwwtest.com:/tmp/#重新启动[root@localhost php-fpm.d]# /etc/init.d/php-fpm restartGracefully shutting down php-fpm . doneStarting 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 -IHTTP/1.1 404 Not FoundServer: nginx/1.17.8Date: Thu, 19 Aug 2021 02:51:12 GMTContent-Type: text/html; charset=UTF-8Connection: keep-aliveX-Powered-By: PHP/5.6.30[root@localhost php-fpm.d]# curl -x127.0.0.1:80 test.com/3.php -IHTTP/1.1 404 Not FoundServer: nginx/1.17.8Date: Thu, 19 Aug 2021 02:51:45 GMTContent-Type: text/html; charset=UTF-8Connection: keep-aliveX-Powered-By: PHP/5.6.30# 把配置文件改为正确的# 发现可以正常使用[root@localhost php-fpm.d]# vim /usr/local/php-fpm/etc/php-fpm.d/www.confphp_admin_value[open_basedir]=/data/nginx/test.com:/tmp/#重新启动[root@localhost php-fpm.d]# /etc/init.d/php-fpm restartGracefully shutting down php-fpm . doneStarting php-fpm done#进行测试[root@localhost php-fpm.d]# curl -x127.0.0.1:80 test.com/3.php -IHTTP/1.1 200 OKServer: nginx/1.17.8Date: Thu, 19 Aug 2021 02:57:52 GMTContent-Type: text/html; charset=UTF-8Connection: keep-aliveX-Powered-By: PHP/5.6.30[root@localhost php-fpm.d]# curl -x127.0.0.1:80 test.com/sleep.php -IHTTP/1.1 200 OKServer: nginx/1.17.8Date: Thu, 19 Aug 2021 02:58:00 GMTContent-Type: text/html; charset=UTF-8Connection: keep-aliveX-Powered-By: PHP/5.6.30
配置错误日志
配置记录php执行错误的日志
# 配置[root@localhost php-fpm.d]# vim /usr/local/php-fpm/etc/php.inidisplay_errors = Offlog_errors = Onerror_log = /usr/local/php-fpm/var/log/php_error.log;error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICTerror_reporting = E_ALL# 再次将php的配置文件改错[root@localhost php-fpm.d]# vim /usr/local/php-fpm/etc/php-fpm.d/www.confphp_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 -altotal 8drwxr-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 restartGracefully shutting down php-fpm . doneStarting php-fpm done# 查看[root@localhost php-fpm.d]# curl -x127.0.0.1:80 test.com/3.php -IHTTP/1.1 404 Not FoundServer: nginx/1.17.8Date: Thu, 19 Aug 2021 03:21:22 GMTContent-Type: text/html; charset=UTF-8Connection: keep-aliveX-Powered-By: PHP/5.6.30[root@localhost php-fpm.d]# curl -x127.0.0.1:80 test.com/sleep.php -IHTTP/1.1 404 Not FoundServer: nginx/1.17.8Date: Thu, 19 Aug 2021 03:21:32 GMTContent-Type: text/html; charset=UTF-8Connection: keep-aliveX-Powered-By: PHP/5.6.30[root@localhost php-fpm.d]# curl -x127.0.0.1:80 test.com/sleep.phpNo 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.socklisten.mode = 666user = php-fpmgroup = php-fpmpm = dynamicpm.max_children = 50pm.start_servers = 20pm.min_spare_servers = 5pm.max_spare_servers = 35pm.max_requests = 500rlimit_files = 1024request_slowlog_timeout = 1slowlog = /usr/local/php-fpm/var/log/www-slow.logphp_admin_value[open_basedir]=/data/nginx/test.com:/tmp/# 重启服务,可以正常使用,也没有产生错误日志。[root@localhost php-fpm.d]# /etc/init.d/php-fpm restartGracefully shutting down php-fpm . doneStarting php-fpm done[root@localhost php-fpm.d]# curl -x127.0.0.1:80 test.com/sleep.php -IHTTP/1.1 200 OKServer: nginx/1.17.8Date: Thu, 19 Aug 2021 03:25:43 GMTContent-Type: text/html; charset=UTF-8Connection: keep-aliveX-Powered-By: PHP/5.6.30[root@localhost php-fpm.d]# curl -x127.0.0.1:80 test.com/3.php -IHTTP/1.1 200 OKServer: nginx/1.17.8Date: Thu, 19 Aug 2021 03:25:50 GMTContent-Type: text/html; charset=UTF-8Connection: keep-aliveX-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的子进程最多可以处理这么多请求,当达到这个数值时,它会自动退出。
