怎么优化php+php-fom+nginx配置参数?下面本篇文章给大家详细介绍一下php+php-fom+nginx配置参数调优的方法,希望对大家有所帮助。
|
怎么优化php+php-fom+nginx配置参数?下面本篇文章给大家详细介绍一下php+php-fom+nginx配置参数调优的方法,希望对大家有所帮助。
一、前言 对于一台新的服务器,安装 1、mysql配置参数:mysql配置参数调优(8GB内存和64GB内存) 2、注意下面给出的一些配置都是相对来说会影响性能或者必须要配置的地方,没有提及的配置都是按照默认的来。这三个程序的配置参数很多,咱们的服务器刚开始也着实用不到太复杂的配置,下面的配置主要是为了尽量提升高并发能力以及尽量提高程序的性能。 php和php-fpm都是5.6版本的。(一切都是为了兼容老项目,,苦逼) 二、php参数配置及讲解1、phpini的基本设置(1)safe_mode 这份的配置采用默认的 (2)disable_functions 在默认的基础上,加上eval()函数 (3)expose_php = off (4)register_globals和magic_quotes_gpc参数都在php5.4.0后被移除了 (5)错误提示以及日志部分采用默认的就行,现在大部分使用的都是框架, 查看框架的错误日志更方便 这几个参数是网上经常提及的,不过咱们这边并不是都要按照他们的配置来,毕竟年代已久,很多 2、php参数设置(1)max_execution_time = 300 脚本运行的最长时间,超出规定时间,脚本会自动杀死这个请求,为了能上传大文件,所以这个值设置的大一些。这个值太小也会造成程序502错误。 (2)memory_limit = 128M 每个脚本使用的最大内存 (3)max_inpit_time = 300 每个脚本等待输入数据的最长时间 (4)upload_max_filesize = 20M 上传文件的最大许可大小 (5)allow_url_fopen = off 禁止打开远程地址 (6)post_max_size = 20M (7);cgi.fix_pathinfo=1 关于 三、php-fpm设置1、设置子进程数,增加并发量log_level = notice //notice级别的日志,默认的 rlimit_files = 4048 //调整最大打开文件数量 pm选用动态变化的dynamic process.max = 150 // 最大子进程,设置成和max_children一样就行 pm = dynamic pm.max_children = 150 //最大子进程,假如一个进程30M,4G内存的话最大为:4048/30 = 135,取150 pm.start_servers = 20 pm.min_spare_servers = 6 pm.max_spare_serveres = 30 //计算公式是:min_spare_servers ≤ start_servers ≤ max_spare_servers ≤ max_children 这块很多人都建议,如果你的内存比较大,那么设置静态的 如果设置成动态的也可以,这样的话是 2、防止频繁出现502错误(1)process_control_timeout = 20 (2)request_terminate_timeout = 320s 表示等待 (3)自动重启设置 #表示在emergency_restart_interval所设值内出现SIGSEGV或者SIGBUS错误的php-cgi进程数如果 #超过emergency_restart_threshold个php-fpm就会优雅重启。这两个选项一般保持默认值 emergency_restart_threshold = 30 emergency_restart_interval = 60s //一分钟内出现30次上述信号即重启php-fpm (4)pm.max_requests = 1000 每一个子进程的最大请求服务数量,如果超过了这个值,该子进程会被自动重启。 比如 3、php-fpm中的慢日志设置 (1)慢日志的主要参数request_slowlog_timeout : 默认是注释的,打开注释,设置为1,代表请求超过1s,就会记录这个脚本到慢日志文件中。也可以的更大,按照需求来。 这里开启慢日志,如下: request_slowlog_timeout = 2 # 记录超过2s的请求 slowlog = /var/log/php-fpm/www-slow.log #慢日志路径 (2)利用sort/uniq命令分析汇总php-fpm慢日志:grep -v “^$” www.log.slow.tmp | cut -d ” ” -f 3,2 | sort | uniq -c | sort -k1,1nr | head -n 50 参数解释: sort: 对单词进行排序 uniq -c: 显示唯一的行,并在每行行首加上本行在文件中出现的次数 sort -k1,1nr: 按照第一个字段,数值排序,且为逆序 head -10: 取前10行数据 4、php-fpm中的backlog是干啥的? 如果 也就说这个 参考: PHP参数调优 四、nginx配置参数调优1、nginx中的一些层级关系 一般打开 答案是: 一个 我们配置的时候,各个 其次是如果在 参考: 2、nginx.conf 实例及解释user www-data;
worker_processes auto; #自动检测CPU的核数
worker_rlimit_nofile 65535; #worker进程的最大打开文件数限制
error_log /var/log/nginx/error.log;
include /etc/nginx/modules-enabled/*.conf;
pid /run/nginx.pid;
events {
worker_connections 10240; #子进程最大连接数,总连接数:worker_processes * worker_connections
use epoll; #使用epoll模型
}
http {
include mime.types; # #文件扩展名与文件类型映射表
default_type application/octet-stream; #这个类型会让浏览器认为响应是普通的文件流,并提示用户下载文件
#记录都有哪些变量可以记录到log_format
log_format main '$remote_addr $host $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_accept_language" "$request_time" '
'"$upstream_response_time" "$upstream_addr" "$upstream_status" "$http_x_real_ip" "$proxy_add_x_forwarded_for"';
sendfile on; #立即将数据从磁盘读到OS缓存
tcp_nopush on; #告诉nginx在一个数据包里发送所有头文件
tcp_nodelay on; # 告诉nginx不要缓存数据,而是一段一段的发送
keepalive_timeout 30; #服务器将在这个超时时间过后关闭链接
types_hash_max_size 2014;
#resolver xxx; #用于解析上游服务器名称的名称服务器配置到地址中
gzip_static on;
gzip on;
gzip_http_version 1.1;
gzip_vary off;
gzip_comp_level 4; #数据的压缩等级,9是最慢但是压缩比最大的
gzip_proxied off;
gzip_buffers 16 8k;
gzip_disable "MSIE [1-6]\.(?!.*SV1)";
#设置需要压缩的数据格式
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/hero-res;
client_max_body_size 20m; #设置网页上传文件的最大值,和php.ini中的上传设置保持一致
server_names_hash_max_size 2048; #保存服务器名字的hash表
include /etc/nginx/client.conf;
include /etc/nginx/conf.d/*.conf;
}(1)worker_rlimit_nofile 更改worker进程的最大打开文件数限制。 查看当前进程可以打开的文件数: ulimit-n //结果:65535 查看当前系统可以打开的最大文件数: ljf@hx:cat /proc/sys/fs/file-max 813544 (2)log_format中的内容 参考官网:https://nginx.org/en/docs/http/ngx_http_core_module.html#var_status remote_addr:对应客户端的地址 remote_user:是请求客户端请求认证的用户名,如果没有开启认证模块的话是值为空。 time_local:表示nginx服务器时间 request:表示request请求头的行 status:表示response的返回状态 body_bytes_sent:表示从服务端返回给客户端的body数据大小 http_referer:表示请求的上一级页面 http_user_agent:表示agent信息 http_x_forwarded_for:会记录每一级请求中信息 (3)gzip压缩相关解释 参考:https://www.jb51.net/article/95041.htm (4)client_max_body_size设置 这个参数规定客户端上传的 3、对于conf.d文件夹中的配置(1)配置实例代码 server{
listen IP:80;
server_name xxx;
access_log /var/log/nginx/access.log; #access日志
fastcgi_intercept_errors on; #支持nginx404重定向
index index.php index.html index.htm;
root /product/ucool/production/manage/htdocs/backend/web/;
send_timeout 15;
#客户端与服务器建立连接后发送request body的超时时间(小于keepalive_timeout)
client_body_timeout 20;
#客户端向服务器发送一个完整的request header的超时时间(小于keepalive_timeout)
client_header_timeout 20;
fastcgi_connect_timeout 300; #指定连接到后端FastCGI的超时时间
fastcgi_send_timeout 300; #指定向FastCGI传送请求的超时时间
fastcgi_read_timeout 300; #指定接收FastCGI应答的超时时间
fastcgi_buffer_size 64k; #指定读取FastCGI应答第一部分需要用多大的缓冲区
fastcgi_buffers 4 64k; #定本地需要用多少和多大的缓冲区来缓冲FastCGI的应答请求
location ~* ^.+\.(git|svn|sql|bak|old|rar|tgz|7z|bz2|tar|idea)$ {
return 404;
}
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php5.6-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
include fastcgi_params;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location ~ /\.git { deny all; }
}(2)主要是fastcgi的一些配置 这里不考虑负载均衡和反向代理,关于 https://www.jb51.net/article/145222.htm (3)关于send_timeout send_timeout 15;
#客户端与服务器建立连接后发送request body的超时时间(小于keepalive_timeout)
client_body_timeout 20;
#客户端向服务器发送一个完整的request header的超时时间(小于keepalive_timeout)
client_header_timeout 20; 这几个参数最好是再小一些,包括 client_body_timeout 12; client_header_timeout 12; keepalive_timeout 15; send_timeout 10; 4、保存编辑之后检查配置文件的正确性(1)检查配置文件是否正确ljf@hx:/etc/nginx$ sudo nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful 返回 (2)检查子级配置文件是否正确nginx -t -c /etc/nginx/conf.d/xxx.conf 例如: ljf@hx:/etc/nginx$ sudo nginx -t -c /etc/nginx/conf.d/api.conf nginx: [emerg] "server" directive is not allowed here in /etc/nginx/conf.d/api.conf:1 nginx: configuration file /etc/nginx/conf.d/api.conf test failed 很明显配置文件是错的。 五、影响程序超时的参数php.ini中有max_execution_time 参数。 php-fpm中有request_terminate_timeout参数 nginx.conf中有 fastcgi_connect_timeout 等参数。 1、关于php和php-fpm超时时间的设置 首先是 还有一种说法,在服务器正常运行的时候, 当程序运行时间大于规定的参数的时候, 2、nginx中的超时设置 假如设置 3、nginx中的keepalive_timeout 4、总结 对于程序超时时间来说,并不能单纯的设置 以上就是对于 后续我也会不断根据生产环境的反馈来更新这些参数,如果各位大佬有好意见或者不同的看法,欢迎沟通交流~ end 推荐学习:《PHP视频教程》 以上就是深入了解怎么优化php+php-fom+nginx配置参数的详细内容,更多请关注模板之家(www.mb5.com.cn)其它相关文章! |
