一、基本安全优化
1.隐藏版本信息
软件漏洞与版本相关,隐藏或者消除web服务队访问用户显示各种敏感信息
解决办法·:在nginx.conf配置文件http{ 添加: server_tokens off;
修改源代码,重新编译:
1 /home/oldboy/tools/nginx-1.6.3/src/core/nginx.h 第14,16行
2 #define NGINX_VERSION "1.6.2" 修改为想要的版本号如2.4.3
3 #define NGINX_VER "nginx/" NGINX_VERSION 将nginx修改为想要修改的软件名称,如Apache。
------------------------
1 /home/oldboy/tools/nginx-1.6.3/src/http/ngx_http_header_filter_module.c第49行
2 grep 'Server:nginx' ngx_http_header_filter_module.cstatic
3 sed -i 's#Server:nginx#Server:Apache#g' ngx_http_header_filter_module.c
-------------------------
/home/oldboy/tools/nginx-1.6.3/src/http/ngx_http_special_response.c第21,30行
"<hr><center>"NGINX_VER "(http://oldboy.blog.51cto.com)</center>" CRLF
"<hr><center>OWS</center>" CRLF
2…更改nginx服务的默认用户
1.直接修改nginx.conf.default参数
2.在编译安装时指定用户
3.降权启动nginx
二、参数优化nginx服务性能
1.优化nginx进程个数策略
worker_processes 1;一般调整到与CPU的颗数相同
--查看linux可查看cup个数及总核数
grep processor /proc/cpuinfo|wc -l
--查看cpu总颗数
grep 'physical id' /proc/cpuinfo|sort|uniq|wc -l
--通过top,然后数字1,显示所有cpu数 top 按1键就会显示第一个的信息
Cpu0 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0
2.优化绑定不同ningx进程到不同的cpu上
解释:在默认情况下nginx的进程泡在一个cpu或cpu的某一个核上
解决:优化不同的nginx进程给不同的cpu处理,充分有效利用有效的硬件资源
–四核cpu配置
worker_processes 4;
worker_cpu_affinity 0001 0010 0100 1000;
--双核配置
worker_processes 2;
worker_cpu_affinity 0101 1010;
--taskset -c 用来分配服务给cpu
3.nginx事件处理模型优化
--解释:nginx链接处理机制在于不同操作系统会采用不同的I/O模型
events {
worker_connections 1024;
use epoll;
}
4.调整nginx单个进程允许的客户最大连接数
参数语法:worker_connections number
默认配置:worker_connections 512
放置位置:events 标签
events {
worker_connections 1024; #一个worker进程的并发
}
总并发= worker_processes* worker_connections
5.配置nginx worker进程最大打开文件数
参数语法:worker_rlimit_nofile number
放置位置:主标签段
说明:作用是改变worker processes能打开的最大文件数
worker_rlimit_nofile 65535;
各参数受系统文件的最大打开数限制
cat /proc/sys/fs/file-max
8192
文件系统最大可打开文件数
ulimit -n
1024
6.开启高效文件传输模式
设置参数 sendfile on;
sendfile参数用于开启文件的高效传输模式。同时将tcp_nopush和tcp_nodelay两个指令设置为on,可防止网络及磁盘i/o阻塞,提升nginx工作效率
http {
sendfile on; #放在http,server,location都可以
}
例:
sendfile on;
tcp_nopush on;
tcp_nodelay on;
server_tokens off;
server_names_hash_bucket_size 128;
server_names_hash_max_size 512;
keepalive_timeout 65;
client_header_timeout 15s;
client_body_timeout 15s;
send_timeout 60s;
7.fastcgi相关参数调优
配合nginx向后请求php动态引擎
fastcgi_connect_timeout 240;
fastcgi_send_timeout 240;
fastcgi_read_timeout 240;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
#fastcgi_temp_path /data/ngx_fcgi_tmp;
fastcgi_cache_path /data/ngx_fcgi_cache levels=2:2 keys_zone=ngx_fcgi_cache:512m inactive=1d max_size=40g;
8.nginx的gzip性能优化
nginx gzip压缩模块提供了压缩文件内容的功能,用户请求的内容在发送给客户端之前,nginx服务器会根据一些具体的策略实施压缩,以节省网站出口带宽,同时加快了数据传输效率,提升了用户的访问体验。
优点
提升网站用户体验:由于发给用户的内容小了,所以用户访问单位大小的页面就快了,用户体验就提升了
缺点
节约网站带宽成本:由于数据时压缩传输的,因此,会消耗一些cpu资源
压缩对象
纯文本内容压缩比很高,因此,纯文本的内容最好要压缩
被压缩的纯文本文件必须要大于1KB,由于压缩算法的特殊原因,极小的文件压缩反而变大
图片、视频(流媒体)等文件尽量不要压缩,因为这些文件大多都是经过压缩的,如果再压缩很可能不会减小或减小很少,或者有可能增大,而在压缩时还会消耗大量的CPU、内存资源
参数配置
gzip on; #表示开启压缩功能
gzip_min_length 1k; #表示允许压缩的页面最小字节数,页面字节数从header头的Content-Length中获取。默认值是0,表示不管页面多大都进行压缩,建议设置成大于1K。如果小于1K可能会越压越大
gzip_buffers 4 32k; #压缩缓存区大小
gzip_http_version 1.1; #压缩版本
gzip_comp_level 9; #压缩比率
gzip_types text/css text/xml application/javascript; #指定压缩的类型
gzip_vary on; #vary header支持
9.nginx的expires
为用户访问网站的内容设定一个过期时间,当用户第一次访问到这些内容时,会把这些内容存储在用户浏览器本地,这样用户第二次及之后继续访问该网站,浏览器就会检查已经缓存在用户浏览器本地的内容,就不会去浏览器下载了,直到缓存的内容过期或者被清除为止。
–expires可以降低网站的带宽,节约成本
–加快用户访问网站的速度,提升了用户访问体验
–服务器访问量降低,服务器压力就减轻了,服务器的成本也会降低,甚至可以节约人力成本
–几乎对于所有web服务来说,这是非常重要的功能之一,apache服务也有此功能
参数配置:
Add expires header according to URI(path or dir).
location ~ ^/(images|javascript|js|css|flash|media|static)/ {
expires 360d;
}