1.依赖安装
[root@mysqlserver php-7.2.3]# yum -y install libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel curl curl-devel openssl openssl-devel
2.编译安装
[root@mysqlserver ~]# tar zxvf php-7.2.3.tar.gz
[root@mysqlserver ~]# cd php-7.2.3
./configure --prefix=/usr/local/php7 \
--enable-fpm \
--with-fpm-user=www \
--with-fpm-group=www \
--with-pdo-mysql=mysqlnd \
--with-mysqli=mysqlnd \
--with-zlib \
--with-curl \
--with-gd \
--with-jpeg-dir \
--with-png-dir \
--with-freetype-dir \
--with-openssl \
--enable-mbstring \
--enable-xml \
--enable-session \
--enable-ftp \
--enable-pdo -enable-tokenizer \
--enable-zip
make && make install
cp php.ini-production /usr/local/php7/lib/php.ini
cp sapi/fpm/php-fpm.service /usr/lib/systemd/system/
--enable-fpm:表示启用 PHP-FPM 功能
--with-fpm-user:指定启动 PHP-FPM 进程的用户
--with-fpm-group:指定启动 PHP-FPM 进程的组
--with-pdo-mysql=mysqlnd:表示使用mysqlnd 驱动,这里的选项涉及两个概念,一个是PDO,另一个是mysqlnd
--with-mysqli=mysqlnd mysqli 叫作 MySQL 增强扩展
3.PHP-FPM配置文件
[root@mysqlserver ~]# cp /usr/local/php7/etc/php-fpm.conf.default /usr/local/php7/etc/php-fpm.conf
[root@mysqlserver ~]# cp /usr/local/php7/etc/php-fpm.d/www.conf.default /usr/local/php7/etc/php-fpm.d/www.conf
修改配置
vim /usr/local/php7/etc/php-fpm.d/www.conf
[www]
user = www
group = www
listen = 127.0.0.1:9000
;listen = /dev/shm/php7-cgi.sock
pm = dynamic
pm.max_children = 100
pm.start_servers = 20
pm.min_spare_servers = 10
pm.max_spare_servers = 50
user 和 group 用于设置运行 PHP-FPM 进程的用户和用户组。
需要注意的是,这里指定的用户和用户组要和 Nginx 配置文件中指定的用户和用户组一致。
listen 是配置 PHP-FPM 进程监听的IP地址以及端口,默认是127.0.0.1:9000。
pm.max children 用于设置 PHP-FPM 的进程数。根据官方建议,小于2GB内存的服务器,可以只开启64个进程,4GB以上内存的服务器可以开启200个进程。
pm:pm 用来指定 PHP-FPM 进程池开启进程的方式,有两个值可以选择,分别是static(静态)和 dynamic(动态)。
static 表示直接开启指定数量的 PHP-FPM 进程,不再增加或者减少;
dynamic 表示开始时开启一定数量的PHP-FPM 进程,当请求量变大时,可以动态地增加 PHP-FPM 进程数直到上限,当空闲时自动释放空闲的进程数到一个下限。
这两种不同的执行方式,可以根据服务器的实际需求来进行调整。
pm.max children:在 static 方式下表示固定开启的 PHP-FPM 进程数量;在 dynamic方式下表示开启 PHP-FPM 的最大进程数。
pm.start servers:表示在 dynamic 方式下初始开启 PHP-FPM 进程的数量。pm.min spare servers:表示在 dynamic 方式空闲状态下开启的最小 PHP-FPM 进程的数量。
pm.max_spare_servers:表示在 dynamic 方式空闲状态下开启的最大 PHP-FPM 进程的数量,这里要注意 pm.max spare servers 的值只能小于等于 pm.max children 的值。如果 pm 被设置为 static,那么其实只有pm.maxchildren 这个参数生效。系统会开启参数设置固定数量的PHP-FPM 进程。如果pm被设置为dynamic,以上4个参数都生效。系统会在PHP-FPM 运行开始时启动pm.start servers指定的 PHP-FPM 进程数,然后根据系统的需求动态在 pm.min spare servers 和 pm.max spare servers 之间调整 PHP-FPM 进程数。
;;;;;;;;;;;;;;;;;;;;;
; FPM Configuration ;
;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;
; Global Options ;
;;;;;;;;;;;;;;;;;;
[global]
pid = run/php-fpm.pid
error_log = "/data/wwwlogs/php56-fpm/log/error_log"
log_level = warning
emergency_restart_threshold = 30
emergency_restart_interval = 60s
process_control_timeout = 5s
daemonize = no
;;;;;;;;;;;;;;;;;;;;
; Pool Definitions ;
;;;;;;;;;;;;;;;;;;;;
[www]
listen = /dev/shm/php5.6-cgi.sock
listen.backlog = -1
listen.allowed_clients = 127.0.0.1:9000
listen.owner = www
listen.group = www
listen.mode = 0666
user = www
group = www
;;pm = static
;;pm.max_children = 2400
;;pm.start_servers = 50
;;pm.min_spare_servers = 40
;;pm.max_spare_servers = 2400
;;pm.max_requests = 102400
;;pm.process_idle_timeout = 30s
;;request_terminate_timeout = 600
;;request_slowlog_timeout = 3
;
;pm = dynamic
;pm.max_children = 1200
;pm.start_servers = 50
;pm.min_spare_servers = 30
;pm.max_spare_servers = 1200
;pm.max_requests = 0
;pm.process_idle_timeout = 10s
;request_terminate_timeout = 600
;request_slowlog_timeout = 3
;pm = static
;pm.max_children = 2400
;pm.start_servers = 50
;pm.min_spare_servers = 30
;pm.max_spare_servers = 2400
;pm.max_requests = 10240 ;每个进程处理多少个请求之后自动终止,防内存泄漏
;pm.process_idle_timeout = 30s ;按需方式下多长时间杀掉php-fpm子进程,直到master进程
;request_terminate_timeout = 600 ;设置单个请求的超时中止时间,如果出现502调整这个
;request_slowlog_timeout = 3
pm = dynamic
pm.max_children = 1200
pm.start_servers = 50
pm.min_spare_servers = 30
pm.max_spare_servers = 1200
pm.max_requests = 0 ;每个进程处理多少个请求之后自动终止,防内存泄漏
pm.process_idle_timeout = 0 ;按需方式下多长时间杀掉php-fpm子进程,直到master进程
request_terminate_timeout = 600 ;设置单个请求的超时中止时间,如果出现502调整这个
request_slowlog_timeout = 3 ;当一个请求该设置的超时时间后,就会将对应的PHP调用堆栈信息完整写入到慢日志>中. 设置为 ’0′ 表示 ‘Off’
pm.status_path = /php-fpm_status
slowlog = /data/wwwlogs/php56-fpm/log/slow.log
rlimit_files = 655350
rlimit_core = 0
catch_workers_output = yes
;env[HOSTNAME] = iZbp19pb6iba2tiaynwwgxZ
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp
#php_admin_value[disable_functions] = passthru,exec,system,chroot,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,fsocket,popen,phpinfo
php_admin_value[open_basedir] = /data/wwwroot/:/data/text_data/:/data/pdf_data/:/tmp/:/var/tmp:/proc/
php_admin_value[session.save_path] = /tmp/
php_admin_value[upload_tmp_dir] = /tmp/
4.服务管理脚本
cat /usr/lib/systemd/system/php-fpm.service
[Unit]
Description=The PHP FastCGI Process Manager
After=network.target
[Service]
Type-simple
PIDFile=/usr/local/php7/var/run/php-fpm.pid
ExecStart=/usr/local/php7/sbin/php-fpm --nodaemonize --fpm-config /usr/local/php7/etc/php-fpm.conf
ExecReload=/bin/ki11 -USR2 $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
5.启动服务
[root@mysqlserver~]# systemctl enable php-fpm
[root@mysqlserver~]# systemctl start php-fpm
6.配置NGINX
原文:
server {
listen 80;
server_name www.abc.com;
location /{
index index.html index.php;
root /web/wwwdata;
}
location ~.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME html$fastcgi_script_name;
include fastcgi_params;
}
}
改进:
nginx.conf中http加入
########################## vhost #############################
include vhost/*.conf;
进入vhost文件夹
server {
listen 81;
# listen 443 ssl http2;
# ssl_certificate /opt/verynginx/openresty/nginx/conf/ssl/yaozh.com.pem;
# ssl_certificate_key /opt/verynginx/openresty/nginx/conf/ssl/yaozh.com.key;
# ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
# ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
# ssl_prefer_server_ciphers on;
# ssl_session_timeout 10m;
# ssl_session_cache builtin:1000 shared:SSL:10m;
# ssl_buffer_size 1400;
# ssl_stapling on;
# ssl_stapling_verify on;
server_name 172.22.0.50;
error_log /data/wwwlogs/lei_error_nginx.log error;
index index.html index.htm index.php;
root /data/wwwroot/lei.com;
location ~ [^/]\.php(/|$) {
fastcgi_pass 127.0.0.1:9000;
#fastcgi_pass unix:/dev/shm/php-cgi.sock;
fastcgi_index index.php;
include fastcgi.conf;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
#fastcgi_param PHP_VALUE "auto_prepend_file=/data/tmp/WAF/test.php";
}
location ~ /\.ht {
deny all;
}
location ~ /\.git {
deny all;
}
}
7.测试
vim /usr/local/nginx/html/phpinfo.php
<?php
//php软件信息
echo phpinfo(0b01)
?>
#查看安装模块信息
[root@mysqlserver~]# /usr/local/php7/bin/php -m
8.测试mysql链接
<?php
$conn = mysqli_connect('127.0.0.1', 'root', 'shimujiuxia', 'mysql');
if (!$conn) {
die("数据库连接错误: " . mysqli_connect_error());
} else {
echo "数据库连接成功";
}
?>