宜兴网站建设公司,信息系统管理工程师,网站开发实训目的,现货交易平台一、全局优化
# 工作进程数
worker_processes auto; # 建议 CPU核心数|CPU线程数# 最大支持的连接(open-file)数量#xff1b;最大值受限于 Linux open files (ulimit -n)
# 建议公式#xff1a;worker_rlimit_nofile worker_processes * worker_connections…一、全局优化
# 工作进程数
worker_processes auto; # 建议 CPU核心数|CPU线程数# 最大支持的连接(open-file)数量最大值受限于 Linux open files (ulimit -n)
# 建议公式worker_rlimit_nofile worker_processes * worker_connections
worker_rlimit_nofile 65535;events {use epoll; # 高效的IO多路复用RedHat6 都支持 epollmulti_accept on; # 设置一个进程是否同时接受多个网络连接worker_connections 10240; # 单个工作进程可承载的最大连接数
}
二、 与客户端之间的优化 http {###### 零拷贝技术sendfile on; # 开启不读到(应用本身)内存直接通过系统发出数据#sendfile_max_chunk 2m; # 每个进程每次调用传输数量不能大于设定的值默认0为无上限。###### 网络传输# on累积到一定容量的数据再发发送次数少# off有数据就发发送次数多占用网络资源tcp_nopush on;###### 长连接用户端比较分散keepalive 默认值已经足够个人不建议重设###### 响应数据 开启压缩模式gzip on;gzip_vary on; # 为兼容老浏览器追加到Header的压缩标注gzip_proxied any; # 所有代理请求都压缩也可指定类型gzip_comp_level 2; # 压缩等级1-9(比例)等级越大 压缩越高 越耗CPUgzip_min_length 128; # 压缩前提当返回内容大于指定时再压缩gzip_types text/css text/xml image/svgxml; # 指定压缩的文件类型更多压缩项可参考 mime.types
} 三、 与后端服务之间的优化
http {upstream backend_A {# ...# 长连接所有请求汇聚到后端服务器并发时是有必要在此基础上重配 keepalive 的# 以下 keepalive 需要 http 1.1 版本并且 header connection closekeepalive 100; # 每个Worker与后端的连接池中保持指定量的空闲连接数QPS的10%keepalive_time 1h; # 每个长连接的(忙碌空闲)总时长超出后强制失效keepalive_timeout 60s; # 每个长连接最大空闲时长超出后自动关闭长连接keepalive_requests 1000; # 每次长连接支持的 Request 次数超出后自动关闭}server {location \ {proxy_pass http://backend_A;proxy_http_version 1.1; # 1.1 支持 keep-liveproxy_set_header connection ; # 覆盖客户端的连接头}}
}
四、 扩展优化
多级缓存通过 Nginx 实现各种缓存的配置浏览器缓存、CDN缓存、Nginx内存、代理缓存、后端服务应用缓存等。
资源静态化 ssi 模块请求结果生成静态页Nginx设置拦截更多的请求直接读静态页后返回减少后端请求定时生成静态页。
静态资源同步 rsync每台服务都安装监控目录变化把生成的静态页推送到多台服务器。
合并请求 concat 第三方模块将多个静态资源文件 合并为一次请求加载完成减少并发量淘宝示例??xxx.js,yyy.js,zzz.js
五、优化项梳理 1、worker_processes 工作进程最大连接数
worker进程数(worker_processes )默认为 1 单进程最大连接数(worker_connections)为1024 每个 worker 进程都是单线程的进程它们会调用各个模块以实现多种多样的功能 如果这些模块确认不会出现阻塞式的调用那么有多少CPU内核就应该配置多少个进程 反之如果有可能出现阻塞式调用那么需要配置稍多一些的worker进程
例如如果业务方面会致使 用户请求 大量读取 本地磁盘上的静态资源文件而且服务器上的内存较小以至于 大部分的请求 访问 静态资源文件 时都必须读取磁盘磁头的寻址是缓慢的而不是内存中的磁盘缓存那么磁盘 IO 调用可能会 阻塞 住 worker 进程少量时间进而导致服务整体性能下降。
运行工作进程个数一般设置CPU的核心或者核心数x2
如果不了解CPU的核数可以top命令后按1来看 # 编辑ng的配置文件vi /usr/local/nginx/conf/nginx.confworker_processes 4;
# 保存退出
# 重新加载ng配置文件/usr/local/nginx/sbin/nginx-s reload
# 查看进程情况ps -aux | grep nginx |grep -v grep
2、worker_cpu_affinity工作进程绑定CPU内核
假定每一个 worker 进程都是非常繁忙的如果多个 worker 进程都在抢同一个 CPU那么这就会出现 同步问题。
反之如果每一个 worker 进程都独享一个 CPU就在 内核的调度 策略上实现了完全的 并发。
注意worker_cpu_affinity 配置仅对 Linux 操作系统有效。 # 如如果有2颗CPU内核就可以进行如下配置
worker_processes 2;
worker_cpu_affinity 10 01;# 如如果有4颗CPU内核就可以进行如下配置
worker_processes 4;
worker_cpu_affinity 1000 0100 0010 0001;# 如如果有8颗CPU内核就可以进行如下配置
worker_processes 8;
worker_cpu_affinity 00000001 00000010 00000100 0000100000010000 00100000 01000000 10000000;
8个以上性能不会再提升了而且稳定性变得更低所以worker_processes 最多开8个就可以了。
3、worker_rlimit_nofile打开文件的最大限制
每个进程的最大文件打开数所以最好与ulimit -n的值保持一致。
linux一切皆文件每一次用户发起请求就会生成一个文件句柄文件句柄可以理解为就是一个索引所有文件句柄就会随着请求量的增多而进程调用的频率增加文件句柄的产生就会越多系统对文件句柄默认的限制是1024个对于nginx来说需要改大一点。
4、work_connections连接数
work_connections表示每个worker子进程可以创建多少个连接默认1024最大是65535
worker_connections的数值根据操作系统允许打开的最大文件数目设定。
从用户的角度http 1.1协议下由于浏览器默认使用两个并发连接,因此计算方法 nginx作为http服务器
max_clients worker_processes * worker_connections/2 nginx作为反向代理服务器
max_clients worker_processes * worker_connections/4
为啥除以4呢
因为在反向代理时浏览器会和nginx建立2条连接nginx也会建立对应的2条连接到后端服务器所以需要除以4。
5、连接超时时间设置
主要目的是保护服务器资源CPU内存控制连接数因为建立连接也是需要消耗资源的。
keepalive_timeout 60;
tcp_nodelay on;
client_header_buffer_size 4k;
open_file_cache max102400 inactive20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 1;
client_header_timeout 15;
client_body_timeout 15;
reset_timeout_connection on;
send_timeout 15;
server_tokens off;
client_max_body_size 10m; keepalive_timeout客户端连接保持会话超时时间超过这个时间服务器断开这个链接。 tcp_nodelay也是防止网络阻塞需要keepalived参数。 client_header_buffer_size客户端请求头部的缓冲区大小这个可以根据系统分页大小来设置一般一个请求头的大小不会超过1k不过由于一般系统分页都要大于1k所以这里设置为分页大小。分页大小可以用命令getconf PAGESIZE取得。 open_file_cache这个将为打开文件指定缓存默认是没有启用的max指定缓存数量建议和打开文件数一致inactive 是指经过多长时间文件没被请求后删除缓存。 open_file_cache_valid这个是指多长时间检查一次缓存。 open_file_cache_min_usesopen_file_cache指令中的inactive 参数时间内文件的最少使用次数如果超过这个数字文件描述符一直是在缓存中打开的。 client_header_timeout设置请求头的超时时间。也可以把这个设置低些如果超过这个时间没有发送任何数据nginx将返回request time out的错误。 client_body_timeout设置请求体的超时时间。可以把这个设置低些超过这个时间没有发送任何数据和上面一样的错误提示。 reset_timeout_connection告诉nginx关闭不响应的客户端连接。这将会释放那个客户端所占有的内存空间。 send_timeout响应客户端超时时间这个超时时间仅限于两个活动之间的时间如果超过这个时间客户端没有任何活动nginx关闭连接。 server_tokens关闭nginx版本符合等保要求。 client_max_body_size上传文件大小限制。
6、GZIP压缩设置
gzip on;
gzip_min_length 1k;
gzip_buffers 4 32k;
gzip_http_version 1.1;
gzip_comp_level 6;
gzip_types text/plain text/css text/javascript application/json application/javascript;
gzip_vary on; gzip_min_length设置允许压缩的页面最小字节数页面字节数从header头的Content-Length中获取默认值是0不管页面多大都进行压缩建议设置成大于1K。 gzip_buffers压缩缓冲区大小表示申请4个单位为32K的内存作为压缩结果流缓存默认值是申请与原始数据大小相同的内存空间来存储gzip压缩结果。 gzip_http_version压缩版本用于设置识别HTTP协议版本默认是1.1目前大部分浏览器已经支持GZIP解压使用默认即可。 gzip_comp_level压缩比例用来指定GZIP压缩比1压缩比最小处理速度最快9压缩比最大传输速度快但是处理慢也比较消耗CPU资源。 gzip_types text/css text/xml application/javascript用来指定压缩的类型text/html类型总是会被压缩 gzip_vary varyheader支持此选项可以让前端的缓存服务器缓存经过GZIP压缩的页面例如用Squid缓存经过nginx压缩的数据。
注意gzip_types 默认是不压缩css和js的。 7、proxy超时设置 proxy_connect_timeout后端服务器连接的超时时间 proxy_send_timeout后端服务器数据回传时间 proxy_read_timeout连接成功后等候后端服务器响应时间 proxy_buffers4是数量32k是大小。该指令设置缓存区的大小和数量从被代理的后端服务器取得的第一部分响应内容会放置到这里默认情况下一个缓存区的大小等于内存页面大小可能是4k也可能是8k取决于平台。 proxy_busy_buffers_sizenginx分配一部分缓冲区来用于向客户端发送数据。大小通常是proxy_buffers单位大小的两倍默认是8k/16k。
8、proxy_set_header配置
它用来设定被代理服务器接收到的header信息。
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;用来设置被代理端接收到的远程客户端IP如果不设置则header信息中并不会透传远程真实客户端的IP地址。
也可以加一写安全校验字段。
Access-Log缓存
# 工作进程数
worker_processes auto; # 建议 CPU核心数|CPU线程数# 最大支持的连接(open-file)数量最大值受限于 Linux open files (ulimit -n)
# 建议公式worker_rlimit_nofile worker_processes * worker_connections
worker_rlimit_nofile 65535;events {use epoll; # 高效的IO多路复用RedHat6 都支持 epollmulti_accept on; # 设置一个进程是否同时接受多个网络连接worker_connections 10240; # 单个工作进程可承载的最大连接数
}
9、Access-Log缓存
access_log /mnt/logs/nginx-access.log buffer64k gzip flush1m buffer 设置指定要使用的缓冲区的大小 flush 多长时间后把缓冲区中的条目写入文件
记录日志的I/O开销比较高可以利用这个功能降低写日志文件的频率从而提高性能。
10、Expires缓存 # 增加客户端过期请求可以路径也可以是文件夹
location ~ ^/(images|javascript|js|css|media|static)/ {expires 360d;
}
一般通过这个配置缓存图片/JS/CSS等静态文件到浏览器减少每次的网络请求加快网页浏览速度。
proxy_cache_path /data/nginx/cache levels1:2 keys_zonepage_cache:10m inactive1d max_size200M;
server {location / {proxy_cache page_cache; proxy_pass http://backend;proxy_cache_bypass $http_pragma;proxy_cache_purge page_cache $scheme$request_method$proxy_host$request_uri;proxy_no_cache $cookie_nocache $arg_nocache$arg_comment;proxy_cache_min_uses 90;}
}
11、静态资源防盗链
防盗链通过在其自身网站程序里调用其他网站的资源然后在自己的网站上显示这些调用的资源使得被盗链的那一端消耗带宽资源。 通过 HTTP referer实现防盗链 水印品牌宣传你的带宽服务器足够 防火墙直接控制前提是你知道IP来源 防盗链策略下面的方法是直接给予404的错误提示
#第一种,匹配后缀location ~ .*.(gif|jpg|jpeg|png|bm|swf|flv|rar|zip|gz|bz2)$ { # 指定需要使用防盗链的媒体资源 access_log off; # 不记录日志 expires 15d; # 设置缓存时间 valid_referers none blocked *.test.com *.abc.com; # 表示仅允许这些域名访问上面的媒体资源 if ($invalid_referer) { # 如果域名不是上面指定的地址就返回403 return 403 }}
#第二种,绑定目录location /images { root /web/www/img; vaild_referers none blocked *.test.com *.abc.com; if ($invalid_referer) { return 403; }}
参数说明 none 不存在的Referer头(直接访问比如直接在浏览器打开一个图片) blocked 意为根据防火墙伪装Referer头如“Referer:XXXX” server_names 为一个或多个服务器的列表
12、非法user_agent拦截
进入到Nginx安装目录下的conf目录编写代码为 agent_deny.conf 切换到ng安装目录 cd ../nginx/conf# 新配置文件 vim agent_deny.conf
#禁止Scrapy等工具的抓取if ($http_user_agent ~* (Scrapy|Curl|HttpClient)) { return 403;}#禁止指定UA及UA为空的访问if ($http_user_agent ~ FeedDemon|JikeSpider|Indy Library|Alexa Toolbar|AskTbFXTV|AhrefsBot|CrawlDaddy|CoolpadWebkit|Java|Feedly|UniversalFeedParser|ApacheBench|Microsoft URL Control|Swiftbot|ZmEu|oBot|jaunty|Python-urllib|lightDeckReports Bot|YYSpider|DigExt|YisouSpider|HttpClient|MJ12bot|heritrix|EasouSpider|Ezooms|^$ ) { return 403; }#禁止非GET|HEAD|POST方式的抓取if ($request_method !~ ^(GET|HEAD|POST)$) { return 403;}
将此文件添加到nginx.conf cd ../vi nginx.conf
include agent_deny.conf
# 保存退出重启./nginx -s reload