• 欢迎访问显哥博客,本网站纯属学习技术,绝无商业用途,欢迎小伙伴们共同学习!研究技术!QQ:52249909 加我QQ
  • 世界75亿人,这么小的概率,能认识你,是我一生的幸运,不妨加个QQ接触一下:52249909 加我QQ

【Linux运维架构】PHP服务企业级优化配置实战

Linux架构 lixian 4年前 (2020-03-12) 603次浏览 1个评论 扫描二维码
文章目录[隐藏]

1.php.ini配置文件优化

PHP程序管理文件/etc/php.ini 主要调整日志,文件上传,禁止危险函数,关闭版本号显示等

错误日志设置

#;;;;;;;;;;;;;;;;;
# Error  logging ;  #错误日志设置
#;;;;;;;;;;;;;;;;;
expose_php = Off                        # 关闭php版本信息
display_error = Off                     # 屏幕不显示错误日志(开发环境可以开启 on)
error_reporting = E_ALL                 # 记录PHP的每个错误
log_errors = On                         # 开启错误日志
error_log = /var/log/php_error.log      # 错误日志写入的位置
date.timezone = Asia/Shanghai           # 调整时区,默认PRC

文件上传设置

#;;;;;;;;;;;;;;;
# File Uploads ;    #文件上传设置
#;;;;;;;;;;;;;;;
file_uploads = On           # 允许文件上传
upload_max_filesize = 300M  # 允许上传文件的最大大小
post_max_size = 300M        # 允许客户端单个POST请求发送的最大数据
max_file_uploads = 20       # 允许同时上传的文件的最大数量
memory_limit = 128M         # 每个脚本执行最大内存

会话共享及禁止危险函数

[Session]       #会话共享
session.save_handler = redis
session.save_path = "tcp://172.16.1.51:6379"
#php禁止危险函数执行(取决于实际情况,需要和开发沟通)
disable_functions = chown,chmod,pfsockopen,phpinfo

禁用危险函数方法如下:
打开/etc/php.ini文件,
查找到 disable_functions ,添加需禁用的函数名,如下:

phpinfo,eval,passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restore,dl,pfsockopen,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,fsocket,fsockopen

2.php-fpm进程的配置

[root@web01 ~]# vim /etc/php-fpm.conf
[global]
;pid = /var/log/php-fpm/php-fpm.pid     #pid文件存放的位置
;error_log = /var/log/php-fpm/php-fpm.log   #错误日志存放的位置
;log_level = error  				#日志级别, alert, error, warning, notice, debug
rlimit_files = 65535     			#php-fpm进程能打开的文件句柄数
;events.mechanism = epoll 			#使用epoll事件模型处理请求
include=/etc/php-fpm.d/*.conf
[root@web01 ~]# vim /etc/php-fpm.d/www.conf
[www]       #池名称
user = www  #进程运行的用户
group = www #进程运行的组
;listen = /dev/shm/php-fpm.sock #监听在本地socket文件
listen = 127.0.0.1:9000         #监听在本地tcp的9000端口
;listen.allowed_clients = 127.0.0.1 #允许访问FastCGI进程的IP,any不限制 
#php进程管理方式,静态管理配置多少就是多少,动态管理
pm = dynamic                    #管理方式(dynamic为动态,static为静态)
pm.max_children = 512           #最大启动的php-fpm进程数(静态管理,配置dynamic时失效)
pm.start_servers = 32           #动态方式下的起始php-fpm进程数量。
pm.min_spare_servers = 32       #动态方式下的最小php-fpm进程数量。
pm.max_spare_servers = 64       #动态方式下的最大php-fpm进程数量。
pm.max_requests = 1500          #达到这个请求数,子进程会重启,如果是0那就一直接受请求
pm.process_idle_timeout = 15s;	#没有请求时多久释放一个进程
pm.status_path = /phpfpm_status #开启php的状态页面

php_flag[display_errors] = off
php_admin_value[error_log] = /var/log/phpfpm_error.log
php_admin_flag[log_errors] = on

#慢日志
request_slowlog_timeout = 5s    #php脚本执行超过5s的文件
slowlog = /var/log/php_slow.log #记录至该文件中

[21-Nov-2013 14:30:38] [pool www] pid 11877
script_filename = /usr/local/lnmp/nginx/html/www.quancha.cn/www/fyzb.php
[0xb70fb88c] file_get_contents() /usr/local/lnmp/nginx/html/www.quancha.cn/www/fyzb.php:2

3.开启php状态监控

配置开启监控模块

[root@web01 ~]# vim /etc/php-fpm.d/www.conf
pm.status_path = /status #开启php的状态页面

配置nginx将页面交给php处理

[root@web01 ~]# vim /etc/nginx/conf.d/php.conf
server {
    listen 80;
    server_name test.php.com;
    root /code;
    index index.php;

    location ~* \.php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location /status {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

4.状态页面参数详解

pool:                 dnf						#池名称
process manager:      dynamic			#进程管理方式
start time:           12/Mar/2020:16:33:46 +0800#服务启动时间
start since:          163					#启动了多少秒
accepted conn:        2					#连接数
listen queue:         0					#等待队列
max listen queue:     0					#等待队列最大值
listen queue len:     128					#等待队列长度
idle processes:       4					#空闲的php进程
active processes:     1					#活跃的php进程
total processes:      5					#php一共多少个进程
max active processes: 1					#最大的活跃进程
max children reached: 0					#进程最大数量限制的次数
slow requests:        0					#慢请求

5.当服务器配置是4核32G时

[root@nginx ~]# cat /etc/php-fpm.d/www.conf
[global]
pid = /var/run/php-fpm.pid

error_log = /var/log/php-fpm.log
log_level = warning
rlimit_files = 655350
events.mechanism = epoll

[www]
user = nginx
group = nginx
listen = 127.0.0.1:9000
listen.allowed_clients = 127.0.0.1

pm = dynamic
pm.max_children = 512
pm.start_servers = 32
pm.min_spare_servers = 32
pm.max_spare_servers = 64
pm.process_idle_timeout = 15s;
pm.max_requests = 2048
pm.status_path = /phpfpm_status

#php-www模块错误日志
php_flag[display_errors] = off
php_admin_value[error_log] = /var/log/php/php-www.log
php_admin_flag[log_errors] = on

#php慢查询日志
request_slowlog_timeout = 5s
slowlog = /var/log/php-slow.log

6.优化总结

nginx
硬件 nginx做代理比较消耗CPU、内存,nginx做静态资源管理比较消耗磁盘和IO;
网络 带宽,传输速率,是否丢包
系统 调整文件描述符,time_wait重用
应用 keepalive长连接
服务 nginx管理静态资源 浏览器缓存、文件高效传输、压缩、防盗链、跨域访问、CPU亲和
nginx做安全 nginx+lua 实现 waf 防火墙

php
php.ini 访问错误日志,上传文件大小调整、session共享配置
php-fpm 监听地址,动态调节php进程,启动日志
php状态模块
php慢查询


本站博主 , 版权所有丨如未注明 , 均为原创
转载请注明原文链接:【Linux运维架构】PHP服务企业级优化配置实战
喜欢 (0)

您必须 登录 才能发表评论!

(1)个小伙伴在吐槽
  1. I don't think the title of your article matches the content lol. Just kidding, mainly because I had some doubts after reading the article.