基询imm能优化,那么在性能优化这一章,咱们将分为以下几个方面作介绍
1.首先咱们须要了解性能优化要考虑哪些方面。
2.而后咱们须要了解性能优化必需要用到的压力测试工具ab。
3.最后咱们须要了解系统上有哪些注意和优化点,以及Nginx配置文件。javascript
咱们在作性能优化工做前,咱们重点须要考虑哪些方面,和了解哪些方面。
1.首先须要了解咱们当前系统结构和瓶颈,了解当前使用的是什么,运行的是什么业务,都有哪些服务,了解每一个服务最大能支撑多大并发。好比Nginx做为静态资源服务的并发是多少,最高支持多少qps(每秒查询率)的访问请求,那咱们怎么得出这组系统结构瓶颈呢,比top查看系统负载的CPU、内存使用率、总的运行进程等,也能够经过曰志去分析请求的状况,固然也能够经过咱们前面介绍到stub_status模块查看当前的链接状况,也能够对线上的业务进行压力测试(低峰期),去了解当前这套系统能承担多少的请求和并发,以作好相应的评估。这个是咱们作性能优化最早考虑的地方。
2.其次咱们须要了解业务模式,虽然咱们是作性能优化,但每个性能的优化都是为业务所提供服务的,咱们须要了解每一个业务接口的类型,好比:电商网站中的抢购模式,这种状况下面,平时没什么流量,但到了抢购时间流量会突增。
咱们还须要了解系统层次化的结构,好比:咱们使用Nginx作的是代理、仍是动静分离,仍是后端直接服务用户,那么这个就须要咱们对每一层作好相应的梳理,以便更好的服务业务。
3.最后咱们考虑性能与安全,每每注重了性能,可是忽略了安全。每每过于注重安全,性能又会产生影响。好比:咱们在设计防火墙功能时,检测过于严密,这样就会给性能带来影响。那么若是对性能彻底追求,却不顾服务的安全,这个也会形成很大的隐患,因此须要评估好二者的关系,把握好二者的孰重孰轻。以及总体的相关性,权衡好对应的点。php
总结:
1.系统结构和瓶颈
2.分析,压力测试工具ab、stub_status
3.了解业务模式
4.了解系统层次化的结构
5.性能与安全css
OSI[flag]
硬件 代理(CPU) 静态(磁盘IO) 动态(cpu、内存)
网络
系统 文件描述符(文件句柄)
应用 服务于服务保持长链接 http1.1
服务 静态资源服务优化html
在系统业务量没有增加以前,咱们就要作好相应的准备工做,已防患业务量突增带来的接口压力,因此对于接口压力测试就显很是重要了。咱们首先要评估好系统压力,而后使用工具检测当前系统状况,是否能知足对应压力的需求。java
[root@web01 ~]# yum install httpd-tools -yum
[root@web01 ~]# ab -n 200 -c 2 http://127.0.0.1/ -n 总的请求次数 -c 并发请求次数 -k 是否开启长链接 [root@web01 conf.d]# ab ab: wrong number of arguments Usage: ab [options] [http[s]://]hostname[:port]/path
[root@web01 conf.d]# cat jsp.conf server { server_name _; listen 80; location / { root /code; try_files $uri @java_page; } location @java_page{ proxy_pass http://127.0.0.1:8080; } } #分别给Nginx准备静态网站 [root@web01 ~]# cat /code/tt.html Nginx Ab Load #重启nginx [root@web01 ~]# systemctl restart nginx #进行压力测试 [root@web01 conf.d]# ab -n100000 -c200 http://127.0.0.1/tt.html [root@web01 conf.d]# ab -k -n100000 -c200 http://127.0.0.1/tt.html #准备Tomcat网站 Tomcat wget http://mirrors.hust.edu.cn/apache/tomcat/tomcat-9/v9.0.16/bin/apache-tomcat-9.0.16.tar.gz tar xf apache-tomcat-9.0.16.tar.gz cd apache-tomcat-9.0.16/webapps/ROOT echo "Tomcat Ab" > tt.html ../../bin/startup.sh #进行压力测试 [root@web01 ~]# ab -k -n100000 -c200 http://127.0.0.1/tt.html
了解性能指标:node
1.网络 网络的流量 网络是否丟包 这些会影http的请求与调用 2.系统 硬件有没有磁盘损坏、磁盘速率 系统负载、内存、系统稳定性 3.服务 链接优化、请求优化 根据业务形态作对应的服务设置 4.程序 接口性能 处理速度 程序执行效率 5.数据库 每一个服务与服务之间都或多或少有一些关联,咱们须要将整个架构进行分层.找到对应系统或服务的短板,而后进行优化。
文件句柄,Linux-切皆文件,文件句柄能够理解为就是一个索引,文件句柄会随着咱们进程的调用频繁增长,系统默认文件句柄是有限制的,不能让一个进程无限的调用,因此咱们须要限制每一个进程和每一个服务使用多大的文件句柄,文件句柄也是必需要调整的优化参数.
文件句柄的设置方式, 1.系统全局性修改。2.用户局部性修改。3.进行局部性修改jquery
系统层面必需要调整nginx
1.系统全局性修改。 # *表明全部用户 * soft nofile 25535 * hard nofile 25535 2.用户局部性修改。 root soft nofile 65535 root hard nofile 65535 3.进程局部性修改 worker_rlimit_nofile 65535; #针对Nginx进程(核心模块)
[root@web01 ROOT]# vim /etc/sysctl.conf net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_timestamps = 1 [root@web01 ROOT]# sysctl -p
一般Nginx做为代理服务,负责转发用户的请求,那么在转发过程当中建议开启HTTP长链接,用于减小握手次数,下降服务器损耗。upstream keepalive说明web
Syntax: keepalive connections; Default:- Context: upstream This directive appeared in version 1.1.4.
upstream http_backend { server 127.0.0.1:8080; keepalive 16; #长链接 } server { ... location /http/ { proxy_pass http://http_backend; proxy_http_version 1.1; #对于http协议应该指定为1.1 proxy_set_header Connection ""; #清除“connection”头字段 proxy_next_upstream error timeout http_500 http_502 http_503 http_504; #平滑过渡 proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwared-For $proxy_add_x_forwarded_for; proxy_connect_timeout 30s; # 代理链接web超时时间 proxy_read_timeout 60s; # 代理等待web响应超时时间 proxy_send_timeout 60s; # web回传数据至代理超时时间 proxy_buffering on; # 开启代理缓冲区,web回传数据至缓冲区,代理边收边传返回给客户端 proxy_buffer_size 32k; # 代理接收web响应的头信息的缓冲区大小 proxy_buffers 4 128k; # 缓冲代理接收单个长链接内包含的web响应的数量和大小 ... } }
upstream fastcgi_backend { server 127.0.0.1:9000; keepalive 8; } server { ... location /fastcgi/ { fastcgi_pass fastcgi_backend; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_keep_conn on; fastcgi_connect_timeout 60s; include fastcgi_params; ... } }
Syntax: keepalive_requests number; Default: keepalive_requests 100; Context: upstream 该指令出现&:1.15.3版中。
Syntax: keepalive_timeout timeout; Default:keepalive_timeout 60s; Context: upstream #该指令出如今1.15.3版
注意:
1.scgi和uwsgi协议没有保持链接的概念。
2.但不管是proxy、fastcgi、uwsgi协议都有cache缓存的功能,开启后可加速网站访问的效率。(取决硬件)ajax
nginx做为静态资源服务器,用于静态资源处理,传输很是的高效。
静态资源是指:非WEB服务器端运行处理而生成的文件
静态资源类型 | 种类 |
---|---|
浏览器渲染 | HTML、CSS, JS |
图片文件 | JPEG、GIF、PNG |
讓文件 | FLV、Mp四、AVI |
其余文件 | TXT、DOC、PDF、••• |
浏览器缓存设置用于提升网站性能,尤为是新闻网站,图片一旦发布,改动的多是很是小的。因此咱们但愿可否用户访问一次后,图片缓存在用户的浏览器长时间缓存。
浏览器是有本身的缓存机制,它是基于HTTP协议缓存机制来实现的,在HTTP协议中有不少头信息,那么实现浏览器的缓存就须要依赖特殊的头信息来与服务器进行特殊的验证,如:Expires (http/1.0) ;Cache-control (http/1.1)。
1.浏览器请求服务器会先进行Expires、Cache-Control的检查,检查缓存是否过时.若是没有过时则直接从缓存文件中读取。
2.若是缓存过时,首先检查是否存在etag,若是存在则客户端会向web服务器请求if-None-Match,与etag值进行比对,由服务器决策返回200仍是304。
3.若是etag不存在,则进last-Modified检查,客户瑞会向web服务器请求If-Moafied-Since,与last-Modified进行比对,由服务器决策返回200仍是304。
1.如今设置缓存10s中的时间。10s到了 缓存是否是应该过时。
浏览器If-None-Match "9-1550193224000"
询问web服务器 etag "9-1550193224000"
浏览器认为只是缓存过时,内容并无修改,因此协商后仍是304
浏览器If-Modified-Since Tue, 29 Jan 2019 02:29:51 GMT
询问web服务器 Last-Modified: Tue, 29 Jan 2019 02:29:51 GMT
浏览器认为只是缓存过时,内容并无修改,因此协商后仍是304
做用:添加Cache-Control Expires头 Syntax: expires [mondified] time; expires epoch | max | off; Default:expires off; Context: http,server,location,if in location
1.开启浏览器缓存
server { listen 80; server_name static.bgx.com; location ~ .*\.(jpg|gif|png)$ { expires 7d; } location ~ .*\.(js|css)$ { expires 30d; } }
2.若是开发代码没有正式上线时,但愿静态资源不被缓存
location ~ \.*(png|jpg|gif|jpeg)$ { add_header Cache-Control no-store; add_header Pragma no-cache; } }
Syntax: sendfile on | off; Default: sendfile off; Context: http, server, location, if in location
传统读取文件方式\zS sendfile读取文件方式
Syntax: tcp_nopush on | off; Default: tcp_nopush off; Context: http, server, location
Syntax: tcp_nodelay on | off; Default: tcp_nodelay on; Context: http, server, location
Nginx将响应报文发送至客户端以前启用压缩功能,而后进行传输,这可以有效地节约带宽,并提升响应至客户端的速度。
Syntax: gzip on | off; Default: gzip off; Context: http, server, location, if in location
Syntax: gzip_types mime-type ...; Default: gzip_types text/html; Context: http, server, location
Syntax: gzip_comp_level level; Default: gzip_comp_level 1; Context: http, server, location
Syntax: gzip_http_version 1.0 | 1.1; Default: gzip_http_version 1.1; Context: http, server, location
[root@Nginx conf.d]# cat static_server.conf server { listen 80; server_name static.oldboy.com; location ~* .*\.(jpg|gif|png)$ { root /code/images; gzip on; gzip_http_version 1.1; gzip_comp_level 2; gzip_types image/jpeg image/gif image/png; } }
[root@Nginx conf.d]# cat static_server.conf server { listen 80; server_name static.oldboy.com; sendfile on; location ~ .*\.(txt|xml|html|json|js|css)$ { gzip on; gzip_http_version 1.1; gzip_comp_level 1; gzip_types text/plain application/json application/x-javascript application/css application/xml text/javascript; } }
防盗链,指的是防止资源被其余网站恶意盗用。
基础防盗链设置思路:主要是针对客户端请求过程当中所携带的一些Header信息来验证请求的合法性,好比客户端在请求的过程当中都会携带referer信息(referer会告诉服务器我是从哪个页面过来的)。优势是规则简单,配置和使用都很方便,缺点是防盗链所依赖的Referer验证信息是能够伪造的,因此经过Referer信息防盗链并不是100%可靠,可是它可以限制大部分的盗链状况。
Syntax: valid_referers none | blocked | server_names | string ...; Default: - Context: server, location #none:Referer来源头部为空的状况 #blocked:Referer来源头部不为空,这些值都不以http://或者https://开头 #server_names:来源头部包含当前的域名,能够正则匹配
1.配置Nginx
[root@web02 conf.d]# cat static.conf server { listen 80; server_name www.linanxi.fun; root /code; location / { index index.html; } }
2.上传2张图片
一张是能够被盗链的图片
一张是广告位的图片:此图为了rewrite给盗链的人
3.重启服务器
[root@web02 code]# systemctl restart nginx
1.配置Nginx
[root@web01 conf.d]# cat try.conf server { server_name dl.oldboy.com; listen 80; root /code; location / { index index.html; } }
2.在盗链服务器上,配置盗链的页面,偷取www.linanxi.fun网站上的图片
[root@web01 code]# cat /code/tt.html <html> <head> <meta charset="utf-8"> <title>oldboyedu.com</title> </head> <body style="background-color:red;"> <img src="http://www.linanxi.fun/smg.jpg"/> #根据状况修改你的服务器地址 </body> </html>
location ~* \.(gif|jpg|png|bmp)$ { valid_referers none blocked *.linanxi.fun; if ($invalid_referer) { return 403; #能够选择直接返回403 rewrite ^(.*)$ /ggw.png break; #也能够选择返回一张水印的图片,给公司作广告 }
以上配置的含义,全部来自linanxi.fun均可以访问到当前站点的图片,若是来源域名不在这个列表中,那么$invalid_referer等于1,在if语句中返回一个403给用户,这样用户就会看到一个403页面。
location ~* \.(gif|jpg|png|bmp)$ { valid_referers none blocked *.linanxi.fun server_name ~\.google\. ~\.baidu\.; if ($invalid_referer) { return 403; #能够选择直接返回403 rewrite ^(.*)$ /ggw.png break; #也能够选择返回一张水印的图片,给公司作广告 }
什么是跨站访问,当咱们经过浏览器访问a网站时,同时会利用到ajax或其余方式,同时也请求b网站,这样的话就出现了请求一个页面,使用了2个域名,这种方式对浏览器来讲默认是禁止。
那Nginx容许跨站访问与浏览器有什么关系呢,由于浏览器会读取Access-Control-Allow-Origin的头信息,若是服务端容许,则浏览器不会进行拦截。
Syntax: add_header name value [always]; Default: 一 Context: http,server,location,if in location
1.在a网站上准备跨站访问的文件
[root@Nginx ~]# cat /code/http_origin.html <html lang="en"> <head> <meta charset="UTF-8" /> <title>测试ajax和跨域访问</title> <script src="http://libs.baidu.com/jquery/2.1.4/jquery.min.js"></script> </head> <script type="text/javascript"> $(document).ready(function(){ $.ajax({ type: "GET", url: "http://fj.xuliangwei.com/public/tt.html", #调用的也是b网站 success: function(data) { alert("sucess!!!"); }, error: function() { alert("fail!!,请刷新再试!"); } }); }); </script> <body> <h1>测试跨域访问</h1> </body> </html>
2.准备b网站
3.经过浏览器测试跨域访问
4.在b网站上容许a网站跨域访问
[root@Nginx conf.d]# cat fj.xuliangwei.com.conf location ~ .*\.(html|htm)$ { add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,OPTIONS; }
CPU亲和(affinity)减小进程之间不断频繁切换,减小性能损耗,其实现原理是将CPU核心和Nginx工做进程绑定方式,把每一个worker进程固定对应的cpu上执行,减小切换cpu的cache miss,得到更好的性能。
1.查看当前CPU物理状态
[root@nginx ~]# lscpu |grep "CPU(s)" CPU(s): 24 #总的核心数 On-line CPU(s) list: 0-23 NUMA node0 CPU(s): 0,2,4,6,8,10,12,14,16,18,20,22 NUMA node1 CPU(s): 1,3,5,7,9,11,13,15,17,19,21,23
每一个物理cpu使用的是那些核心(表明2颗物理CPU,)
本次演示服务器为 两颗物理cpu,每颗物理CPU12个核心, 总共有24个核心
2.将Nginx worker进程绑定到不一样的核心上。
#最佳方式,修改nginx启动的work进程为自动。 worker_processes auto; worker_cpu_affinity auto;
不推荐调整的方式 # 第一种绑定组合方式 worker_processes 24; worker_cpu_affinity 000000000001 000000000010 000000000100 000000001000 000000010000 000000100000 000001000000 000010000000 000100000000 001000000000 010000000000 10000000000; # 第二种方式(使用较少) worker_processes 2; worker_cpu_affinity 101010101010 010101010101;
3.查看nginx worker进程绑定至对应的CPU
[root@web01 ~]# ps -eo pid,args,psr|grep [n]ginx 1242 nginx: master process /usr/ 2 1243 nginx: worker process 0 1244 nginx: worker process 1 1245 nginx: worker process 2 1246 nginx: worker process 3
Nginx通用配置 / Nginx代理相关配置 / Nginx Fastcgi能够写三个模板。
Nginx主配置文件:
[root@nginx ~]# cat nginx.conf user www; # nginx进程启动用户 worker_processes auto; #与cpu核心一致便可 worker_cpu_affinity auto; # cpu亲和 error_log /var/log/nginx/error.log warn; # 错误日志 pid /run/nginx.pid; worker_rlimit_nofile 35535; #每一个work能打开的文件描述符,调整至1w以上,负荷较高建议2-3w events { use epoll; # 使用epoll高效网络模型 worker_connections 10240; # 限制每一个进程能处理多少个链接,10240x[cpu核心] } http { include mime.types; default_type application/octet-stream; charset utf-8; # 统一使用utf-8字符集 #定义日志格式 log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; # 访问日志 server_tokens off; # 禁止浏览器显示nginx版本号 client_max_body_size 200m; # 文件上传大小限制调整 #文件高效传输,静态资源服务器建议打开 sendfile on; tcp_nopush on; # 文件实时传输,动态资源服务建议打开,须要打开keepalive tcp_nodelay on; keepalive_timeout 65; # Gzip 压缩 gzip on; gzip_disable "MSIE [1-6]\."; gzip_http_version 1.1; gzip_comp_level 2; gzip_buffers 16 8k; gzip_min_length 1024; gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml applicati on/xml+rss text/javascript image/jpeg; # 虚拟主机 include /etc/nginx/conf.d/*.conf; }
1.cpu亲和、worker进程数、调整每一个worker进程打开的文件数 2.使用epool网络模型、调整每一个worker进程的最大链接数 3.文件的高效读取sendfile、nopush、 4.文件的传输实时性、nodealy 5.开启tcp长连接、以及长连接超时时间keepalived 6.开启文件传输压缩gzip 7.开启静态文件expires缓存 8.隐藏Nginx的版本号 9.禁止经过IP地址访问,禁止恶意域名解析,只容许域名访问 10.配置放盗链、以及跨域访问 11.防DDOS、cc攻击, 限制单IP并发链接,以及http请求 12.优雅限制nginx错误页面 13.nginx加密传输https优化 14.nginx proxy_cache、fastcgi_cache、uwsgi_cache缓存 squid、varnish()
#;;;;;;;;;;;;;;;;; # Error logging ; #错误日志设置 #;;;;;;;;;;;;;;;;; expose_php = Off # 关闭php版本信息 display_error = Off # 屏幕不显示错误日志 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"
禁止危险函数的详细讲解:https://blog.csdn.net/unixtech/article/details/53761832
php禁止危险函数执行(取决于实际状况,须要和开发沟通)
disable_functions = chown,chmod,pfsockopen,phpinfo
#第一部分,fpm配置 ;include=etc/fpm.d/*.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事件模型处理请求 #第三部分,进程池定义 [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不限制 pm = dynamic #动态调节php-fpm的进程数 pm.max_children = 512 #最大启动的php-fpm进程数 pm.start_servers = 32 #初始启动的php-fpm进程数 pm.min_spare_servers = 32 #最少的空闲php-fpm进程数 pm.max_spare_servers = 64 #最大的空闲php-fpm进程数 pm.max_requests = 1500 #每个进程能响应的请求数 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
[root@nginx ~]# vim /etc/php-fpm.d/www.conf pm.status_path = /phpfpm_status #开启php的状态页面 #修改nginx配置:加一个location 新增配置以下: location /phpfpm_status { fastcgi_pass 127.0.0.1:9000; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } 状态显示以下: [root@nginx ~]# curl http://127.0.0.1/phpfpm_status pool: www #fpm池名称,大多数为www process manager: dynamic #动态管理phpfpm进程 start time: 05/Jul/2016 #启动时间,若是重启会发生变化 start since: 409 #php-fpm运行时间 accepted conn: 22 #当前池接受的链接数 listen queue: 0 #请求等待队列,若是这个值不为0,那么须要增长FPM的进程数量 max listen queue: 0 #请求等待队列最高的数量 listen queue len: 128 #请求等待队列的长度 idle processes: 4 #php-fpm空闲的进程数量 active processes: 1 #php-fpm活跃的进程数量 total processes: 5 #php-fpm总的进程数量 max active processes: 2 #php-fpm最大活跃的进程数量(FPM启动开始计算) max children reached: 0 #进程最大数量限制的次数,若是数量不为0,则说明phpfpm最大进程数量太小,能够适当调整。
[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
nginx
硬件层面 代理比较的消耗CPU、内存、 静态比较消耗磁盘IO、 网络层面 网络带宽大小、传输速率、是否有丢包、 系统层面 调整文件描述。 timewait重用 应用层面 nginx做为代理 keepalive 长链接 服务层面 nginx做为静态 浏览器缓存、文件传输、压缩、防盗链、跨域访问、CPU亲和 nginx做为缓存 proxy_cache fastcgi_cache uwsgi_cache nginx做为安全 nginx+lua实现waf防火墙
php
php.ini 错误日志记录、文件大小的调整、session会话共享的配置、禁止没必要要的函数(与开发协商) php-fpm 监听地址、进程的动态调节、日志开启。 php状态 php自身监控的状态信息 php慢查询 什么时间、什么进程、运行什么文件、哪一个函数、第几行达到了超时时间