nginx优化
2017-07-11 11:10
357 查看
查看nginx编译的参数:
访问:curl -I 10.0.0.7 <= 有版本号
去掉版本号: curl -I -s 10.0.0.7 | grep -i server
在nginx配置文件中加入
2、更改nginx的默认用户及用户组
在nginx配置文件中更改
3、配置nginx worker进程个数
在高并发场景,我们需要事先启动更多的进程
平衡点
指定了nginx要开启的进程数,建议指定和cpu核数相等。
4、根据cpu核数进行nginx进程优化
不同cpu对应的配置如下
举例:
5、事件处理模型优化
nginx的连接处理机制在于不同的操作系统采用的不同IO模型,在linux使用epoll的IO多路复用的模型
6、调整单个进程允许的客户端最大连接数
nginx总并发连接数=nginx worker数* work_connection
7、配置每个进程最大文件打开数
建议不要设置成最大的65535
8、优化服务器名字的hash表大小
如果定了了大量名字,或者定义了比较长的名字,那就需要在http配置模块中调整server_name_hash_max_size和server_names_bucket_size的值
9、开启高效文件传输模式
10、设置连接的超时时间
先让首屏先加载,后面的在慢慢加载,php服务建议短连接,java服务建议长连接
11、上传文件大小限制(动态应用)
12、gzip压缩功能
完整配置如下:
压缩类型在安装目录下mime.type里面存放可以压缩的类型
13、expire功能
13.1 在服务端配置某些元素,告诉服务的缓存多久
好处:
①第一次访问网站会比较快,因为缓存放在本地 ,用户体验好
②节省带宽
③服务器压力降低
缺点:
①网站如果改版,对应的用户看到的还是旧的
解决缺点方法:
①设置过期时间短一些
②当资源文件更新时,改名即可,浏览器重新访问时,就会重新加载资源
13.2 针对目录进行配置
13.3 针对单个文件进行配置(robots爬虫协议)
robots.txt设置可以或禁止各种搜索引擎访问的资源,但是会暴露目录结构。
13.4 nginx防爬虫优化
13.5 禁止不同浏览器软件访问
14、nginx防盗链设置
14.1 一般防盗链设置
第一行:gif|jpg|png|swf|flv 表示对gif、jpg、png、swf、flv后缀的文件实行防盗链
第二行: 表示对bbs.com这2个来路进行判断 if{}里面内容的意思是,如果来路不是指定来路就跳转到http://www.bbs.com/img/retrun.html页面,当然直接返回404也是可以的。
14.2 针对图片目录防止盗链
提示:实际上脚本就是改名日志,然后加载nginx配置文件,重新生成日志文件。
2、不需要记录访问日志
3、访问日志权限设置
主进程是root,所以没有必要给nginx权限,他也可以写进去。
4、combined格式(apache用的比较多)
在主配置文件中把common改为 combined即可
5、日志轮询(工具自带rotatelogs和常用的cronolog)
1) cronolog是第三方软件包,需要下载
./configure && make && make isntall
生成一个工具:ll /usr/local/sbin/cronolog
在主配置文件中把common 换成 combined
按天轮询
访问即可生成
2)rotatelogs轮询
访问即可生成
[root@iZ23hh6yk41Z ~]# /usr/local/nginx/sbin/nginx -V
一、nginx配置文件优化
1、隐藏nginx header/apache header内核版本号信息访问:curl -I 10.0.0.7 <= 有版本号
去掉版本号: curl -I -s 10.0.0.7 | grep -i server
在nginx配置文件中加入
http { ………….. server_tokens off ; …………. }
2、更改nginx的默认用户及用户组
[root@iZ23hh6yk41Z ~]# grep "#user" /usr/local/nginx/conf/nginx.conf.default #user nobody;
在nginx配置文件中更改
user nginx nginx; useradd nginx -s /sbin/nologin -M
3、配置nginx worker进程个数
在高并发场景,我们需要事先启动更多的进程
平衡点
worker_process 8; #(worker_process auto ; )
指定了nginx要开启的进程数,建议指定和cpu核数相等。
4、根据cpu核数进行nginx进程优化
不同cpu对应的配置如下
work_cpu_affenity 0001 0010 0100 1000; #四核cpu服务器
work_cpu_affenity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000; #八核cpu服务器 work_cpu_affenity 0001 0010 0100 1000 0001 0010 0100 1000; #八核cpu服务器
举例:
work_process 4; work_cpu_affenity 0001 0010 0100 1000; work_process 2; work_cpu_affenity 0101 1010;
5、事件处理模型优化
nginx的连接处理机制在于不同的操作系统采用的不同IO模型,在linux使用epoll的IO多路复用的模型
event { …… use epoll; …… }
6、调整单个进程允许的客户端最大连接数
event { …….. work_connection 2048; …….. }
nginx总并发连接数=nginx worker数* work_connection
7、配置每个进程最大文件打开数
work_rlimit_nofile 10240;
建议不要设置成最大的65535
8、优化服务器名字的hash表大小
如果定了了大量名字,或者定义了比较长的名字,那就需要在http配置模块中调整server_name_hash_max_size和server_names_bucket_size的值
http{ ……….. server_name_hash_max_size 64; server_names_bucket_size 64; ………. }
9、开启高效文件传输模式
sendfile on;
10、设置连接的超时时间
先让首屏先加载,后面的在慢慢加载,php服务建议短连接,java服务建议长连接
#设置客户端连接保持会话保持的超时时间,超过这个时间,服务器会关闭连接 keepalive_timeout 60;
#打开tcp_nodelay,在包含了keepalive参数才有效 tcp_nodelay on;
#设置客户端请求头读取超时时间,如果超过这个时间,客户端还没有发送任何数据,nginx将返回“Request time out(408)”错误 client_header_timeout 15;
#设置客户端请求主体读取超时时间,如果超过这个时间,客户端还没有发送任何数据,nginx将返回“Request time out(408)”错误,默认是60 client_body_timeout 15;
#指定相应客户端的超时时间,这个超时仅限于两个活动之间的时间,如果超过了这个时间,客户端没有任何活动,nginx将会关闭连接 send_timeout 15;
11、上传文件大小限制(动态应用)
client_max_body_size 10m;
12、gzip压缩功能
所有的程序文件都可以(js,css,html压缩),不要压缩的内容(图片,视频,flash文件,特别小的内容) #开启gzip压缩功能 gzip on;
#设置允许压缩的页面最小字节数,页面字节数从header头的Content-Length中获取。默认值是0,不管页面多大都进行压缩,建议设置成大于1K。如果小于1K可能会压力过大。 gzip_min_length 1k;
#压缩缓冲区大小。表示申请4个单位为16K的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间来存储gzip压缩结果 gzip_buffers 4 16k;
#压缩版本号,用于设置识别http协议版本,默认是1.1,目前大部分浏览器已经支持gzip压缩,默认即可 gzip_http_version 1.0;
#压缩比率。用来指定gzip压缩比,1压缩比最小,处理速度最快;9压缩比最大,传输速度快,单处理最慢,也比较消耗cpu gzip_comp_level 2;
#用来指定压缩的类型,”text/html”类型总是会被压缩 gzip_types text/html text/css application/javascript;
#vary header支持。该选项可以让前端的缓存经过gzip压缩的页面,例如用squid缓存经过nginx压缩的数据。 gzip_vary on;
完整配置如下:
gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_http_version 1.1; gzip_comp_level 2; gzip_types text/plain application/javascript application/x-javascript text/javascript text/css application/xml application/xml+rss; gzip_vary on; gzip_proxied expired no-cache no-store private auth; gzip_disable "MSIE [1-6]\.";
压缩类型在安装目录下mime.type里面存放可以压缩的类型
13、expire功能
13.1 在服务端配置某些元素,告诉服务的缓存多久
好处:
①第一次访问网站会比较快,因为缓存放在本地 ,用户体验好
②节省带宽
③服务器压力降低
缺点:
①网站如果改版,对应的用户看到的还是旧的
解决缺点方法:
①设置过期时间短一些
②当资源文件更新时,改名即可,浏览器重新访问时,就会重新加载资源
location ~ .*\.(gif|jpg|png|bmp|jpeg|swf)$ { …… expires 3650d; root html; …… } location ~ .*\.(js|css)?$ { …….. expires 30d; root html; ……… }
13.2 针对目录进行配置
location ~ ^/(images|javascript|js|css|flash|media|static)/ { …… expires 30d; ……… }
13.3 针对单个文件进行配置(robots爬虫协议)
location ~ ^(robots.txt) { log_not_found off; expires 7d; break; }
robots.txt设置可以或禁止各种搜索引擎访问的资源,但是会暴露目录结构。
13.4 nginx防爬虫优化
if ($http_user_agent ~* “qihoobot|Sogouspider|Baiduspider|Googlebot|...”) { return 403; }
13.5 禁止不同浏览器软件访问
if ($http_user_agent ~* “Firefox|MSIE”) { return 403; }
14、nginx防盗链设置
14.1 一般防盗链设置
location ~* \.(jgp|gif|png|swf|flv)$ { valid_referers none blocked *.bbs.com bbs.com; if ($valid_referers) { rewrite ^/ http://www.bbs.com/img/retrun.html; #return 404; } }
第一行:gif|jpg|png|swf|flv 表示对gif、jpg、png、swf、flv后缀的文件实行防盗链
第二行: 表示对bbs.com这2个来路进行判断 if{}里面内容的意思是,如果来路不是指定来路就跳转到http://www.bbs.com/img/retrun.html页面,当然直接返回404也是可以的。
14.2 针对图片目录防止盗链
location /images/ { alias /data/images/; valid_referers none blocked server_names *.xok.la xok.la ; if ($invalid_referer) { return 403; } }
二、日志优化
1、配置日志切割脚本mkdir /server/script -p cd /server/script cat >> cut_nginx_log.sh << OF cd /home/wwwlogs/nginx/logs/ &&\ /bin/mv www_access.log www_access_$(date +%F -d -1day).log /usr/local/nginx/sbin/nginx -s reload OF
提示:实际上脚本就是改名日志,然后加载nginx配置文件,重新生成日志文件。
2、不需要记录访问日志
location ~ .*\.(js|jgp|png|JPEG|css|bmp|gif)$ { access_log off; }
3、访问日志权限设置
主进程是root,所以没有必要给nginx权限,他也可以写进去。
chown -R root /app/logs chmod -R 700 /app/logs
4、combined格式(apache用的比较多)
在主配置文件中把common改为 combined即可
5、日志轮询(工具自带rotatelogs和常用的cronolog)
1) cronolog是第三方软件包,需要下载
./configure && make && make isntall
生成一个工具:ll /usr/local/sbin/cronolog
在主配置文件中把common 换成 combined
按天轮询
CustomLog "|/usr/local/sbin/cronolog /app/log/bbs/access_bbs_%Y%m%d.log" combined
访问即可生成
2)rotatelogs轮询
CustomLog "|/usr/local/sbin/cronolog /app/log/bbs/access_bbs_%Y%m%d%H%M.log" 86400 combined
访问即可生成