查看nginx编译的参数:
[root@iZ23hh6yk41Z ~]# /usr/local/nginx/sbin/nginx -V1、隐藏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 -M3、配置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/logs4、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访问即可生成