您的位置:首页 > 运维架构 > Nginx

nginx优化

2017-07-11 11:10 357 查看
查看nginx编译的参数:

[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


访问即可生成
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: