Nginx优化

NGINX的相关优化总结
基本安全优化:
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.在编译安装时指定用户
参数优化服务性能
--参数优化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;
		各参数受系统文件的最大打开数限制
  		[root@admin nginx]# cat /proc/sys/fs/file-max 
 		 8192
6、文件系统最大可打开文件数
   		[root@admin nginx]# ulimit -n
    	1024
		开启高效文件传输模式
		设置参数 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;
	fastcgi相关参数调优
7、配合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;
}
日志优化
1、--编写脚本实现日志轮询
用户请求一个软件时,绝大多数软件都会记录用户的访问情况,nginx软件目前没有类似apache通过cronolog或者rotatelog对日志分隔处理的功能,但是,运维人员可以通过利用脚本开发、nginx的信号控制功能或reload重新加载,来实现日志的自动切割、轮询。
		--定时任务
mv www_access.log www_access_$(date +F -d -1day).log
/applocation/nginx/sbin/nginx -s reload
2、--不记录不需要的日志
	具体配制方法:
location ~ .*\.(js|jpg|JPG|jpeg|JPEG|css|bmp|gif|GIF)$ {
    access_log off;
}
3、--日志访问权限设置
	  chown -R root.root /app/logs
  chmod -R 600 /app/logs
限制http的请求方法
if ($request_method  !~  ^(GET|HEAD|POST)$ ) {
return  501;
}
#Only allow these request methods##
if ($request_method ~*(GET)$ ) {
   return 501;
}
控制nginx的并发连接数
ngx_http_limit_conn_module
	限制每个定义key值得连接数,特别是单个TP的连接数。 
  不是所有的连接数都会被计算。一个符合计数要求的连接是整个请求头已经被读取的连接。
  控制Nginx并发连接数量参数的说明 
  1)limit_conn_zone参数: 
    语法:limit_conn_zone key zone=name:size; 
    上下文:http 
    用于设置共享内存区域,key可以是字符串、Nginx自带变量或前两个组合。name为内存区域的名称,		size为内存区域的大小。
  2)limit_conn参数 
    语法:limit_conn zone number; 
    上下文:http、server、location 
    用于指定key设置最大连接数。当超时最大连接数时,服务器会返回503报错。
控制客户端请求nginx的速率
ngx_http_limit_req_module
	用于限制每个IP访问每个定义key的请求速率。
  limit_req_zone参数说明如下。 
    语法:limit_req_zone key zone=name:size rate=rate; 
    上下文:http 
    用于设置共享内存区域,key可以是字符串,Nginx自带变量或前两个组合。name为内存区域的名称,		size为内存区域的大小,rate为速率,单位为r/s,每秒一个请求。 
  limit_req参数说明如下: 
    语法:limit_req zone=name [burst-number] [nobelay] 
    上下文:http、server、location 
    这里运用了令牌桶原理,burst=num,一个有num快令牌,令牌发完后,多出来的那些请求就会返回503。 
  nodelay默认在不超过burst值得前提下会排队等待处理,如果使用此参数,就会处理完num+1次请求,剩余	的请求为超时,返回503。
防爬虫
if  ($http_user_agent   ~*  LWP:Simple|BBBike|wget)  {
return  403 ;
rewrite ^(.*) http://blog.etiantian.org/$1 permanent;
}
错误页面优雅显示
--nginx错误页面优雅显示
	出现403错误会跳转到403.html页面
		error_page  403  /403.html;
nginx图片防盗链
经过你的允许在自己网站嵌入你的图片。
	根据HTTP referer实现防盗链
	据cookie防盗链
	 #Preventing hot linking of images and other file types
 	location ~* ^.+\.(jpg|png|swf|flv|rar|zip)$ {
    valid_referers none blocked *.etiantian.org etiantian.org;
     if ($invalid_referer) {
       rewrite ^/ http://bbs.etiantian.org/img/nolink.gif;
    }
    root html/www;
	15 }

Nginx的一些特性:

反向代理/L7负载均衡器
嵌入式Perl解释器
动态二进制升级
可用于重新编写URL,具有非常好的PCRE支持

Nginx处理HTTP请求:

Nginx使用反应器模式。主事件循环等待操作系统发出准备事件的信号,这样数据就可以从套接字读取,在该实例中读取到缓冲区并进行处理。单个线程可以提供数万个并发连接

Nginx服务器的最佳用途:

在网络上部署动态HTTP内容,使用SCGI、WSGI应用程序服务器、用于脚本的FastCGI处理程序。它还可以作为负载均衡器。

Nginx服务器上的Master和Worker进程:

Master进程:读取及评估配置和维持
Worker进程:处理请求

stub_status和sub_filter指令的作用:

Stub_status指令:该指令用于了解Nginx当前状态的当前状态,如当前的活动连接,接受和处理当前读/写/等待连接的总数
Sub_filter指令:它用于搜索和替换响应中的内容,并快速修复陈旧的数据
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值