Nginx优化

it2024-10-19  40

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)