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慢查询