tengine 的优化
查服务器CPU的核数 :
[root@c01 conf]# grep processor /proc/cpuinfo |wc -l
4
[root@c01 conf]# grep -c processor /proc/cpuinfo
4
淘宝维护的nginx分支Tengine可以使用auto命令自动配置worker_processes和worker_cpu_affinity。
[root@c01 conf]# grep worker_processes nginx.conf
worker_processes auto;
查看worker进程数量:
[root@c01 conf]# ps aux|grep nginx|grep -v 'grep'
root 1510 0.0 0.5 26464 5532 ? Ss 10:29 0:00 nginx: master process /apps/tengine-2.1.0/sbin/nginx
www 1693 0.0 2.9 55136 29920 ? S 11:04 0:00 nginx: worker process
www 1694 0.0 2.9 55136 29632 ? S 11:04 0:00 nginx: worker process
www 1695 0.0 2.9 55136 29632 ? S 11:04 0:00 nginx: worker process
www 1696 0.0 2.9 55136 29632 ? S 11:04 0:00 nginx: worker process
从"worker_processes auto"可以看出,NGINX会跟具CPU的核数自动分配进程数,由于服务器的CPU是4核的,所以WORKER的数量为4.NGINX MASTER主进程不包含在这个参数内,NGINX MASTER的主进程为管理进程负责调度和管理WORKER进程.
有关worker_processes定义的work进程数量,建义设置 为CPU的核数或CPU核数的2倍(还根硬盘存储的数据用系统的负载有关)
优化绑定不同的NGINX进程到不同的CPU上:
默认情况下,NGINX的多个进程有可能运行在某一个CPU或CPU的某一核 上,导至进程使用硬件的资源不均,本节的优化将尽可能地将不同的NGINX的进程分配给不同的进程里,达到充分有效利用硬件的多CPU多核资源的目的.
如下:
worker_processes 4;
worker_cpu_affinity 0001 0010 0100 1000;
#worker_cpu_affinity就是配置 NGINX进程与CPU亲和力的参数,即把不同的进程分给不同的CPU处理.这里0001 0010 0100 1000是掩码,分别代表第1,2,3,4核CPU,由于WORKER_PROCESSES进程数为4,因此,上述配置 会为每个进程分配一核 CPU处理,默认情况下进程不会绑定任何CPU,参数位置 为MAIN段.
八核 CPU服务器的参数配置 参配置 参考如下:
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
worker_cpu_affinity 0001 0010 0100 1000 0001 0010 0100 1000;
work_cpu_affinity的作用是绑定不同的worker进程数到一组CPU上.通过设置bimask控制进程允许使用的CPU,默认worker进程不会绑定到任何CPU上.
调整nginx单个进程允许的客户最大连接数:
events
{
use epoll;
worker_connections 51200;
} #worker_connections 是一个事件模块指令,用于定义nginx每个进程的最大连接数,默认是1024.最大客户连接数由worker_processes和worker_connections决定,限max_client=worker _processes*work_connections.
进程的最大连接数受linux系统进程的最大打开文件数限制,在执行操作系统命令"ulimit -HSn 51200"或配置 相应文件后,worker_connections的设置才能生效.
配置 nginx worker进程的最大打开文件数:
worker_rlimit_nofile 51200; events
{
use epoll;
worker_connections 51200;
}
#nginx worker进程的最大打开文件数,这个控制连接数的参数为worker_rlimit_nofile.
最大打开文件数,可设置 为系统优化后的ulimit -HSn的接果
ulimit 一些参数的说明:
-H:设定资源的硬性限制,也就是管理员所设下的限制
-S:设定资源的弹性 限制
-n:指定同一时间最多可开启的文件数
优化服务器域名的散列表大小:
先要将确切名字和通配符名字存储在散列表中.散列表与监听端口关联,每个端口最多关联到三张表:确切名字的散列表,以星号起始的通配符名字
的散列表和以星号结束的通配符名字的散列表.散列表的尺寸在配置阶段进行优化,可以最小的CPU缓存命中失败来打到名子.NGINX首先会搜索确
切的名字的列表;如果没有找到,则搜索以星号起启的通配符名字的散列表;如果还没有找到,则继续搜索以星号结束的通配符名字的散列表.因为名按照域名的字>节来搜索的,所以搜索通配符名字的散列表比搜索确切名字的散列表慢.
注意:
nginx.org存储在通配符名字的散列表中,而不在确切名字的散列表中.由于正则表达式是逐个进行串行测试的,因些该方式也是最慢的,而且不可扩展.
所以尽可能地使用确切的名字:
如:
server {
listen 80;
server_name nginx.org www.nginx.org *.nginx.org;
...
} 下面这种方法更简单,但是效率也更低:
server {
listen 80;
server_name .nginx.org;
...
}
如果定义大量的名字,或者定义了非常长的名字,那就需要在http配置块中整:
server_names_hash_max_size 256;
server_names_hash_bucket_size 64;
#每一个多个域名的长度最大值,第二个单个域名的最大值(未能复现问题,以后再求证)
开启高效文件传输模式:
sendfile参数用于开启文件的高效传输模式.同时将tcp_nopush 和tcp_nodelay两个指令设置 为on,可以防止网络和磁盘I/O阻塞,提升Nginx工作效率.
sendfile on;
tcp_nodelay on;
tcp_nopush on;
tcp_nodelay:默认情况下当数据发送时,内核并不会骊上发送,可能会等待更多的字节组成一个数据包,这样可以提高I/O性能.但是,在每次只发送很少字节的务业场景中,使用tcp_nodelay功能,等待时间会比较长.
nginx配置 gzip压缩功能介绍:
纯文本内容的压缩比很高,因些,纯文本的内容最好进行压缩,例如:html,js,css,xml,shtml格式文件;注意被 压缩的纯文本文件必须大于1KB,由于压缩算法的特殊原因,极小的文件压缩后可能反而变大;图片,视频(流媒体)等文件尽量不要压缩,因为这些文件大多数是经过压缩的,如果再压缩很可能不会减少,甚至 还有可能增大,同时压缩时还会
消耗大量的CPU,内存资源.
NGINX的GZIP压缩功依赖于:ngx_http_gzip_module模块(默认已安装)
对应压缩参数说明如下:
gzip on; #开启gzip压缩工能
gzip_vary on;#gzip_vary on
gzip_comp_level 6;#GZIP的压缩比列,1表示压缩最小,外理最快;9表示压缩最大,传输速度最快,但处理慢,消耗CPU;
gzip_buffers 16 8k;#设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。
16 8k代表以8k为单位,安装原始数据大小以8k为单位的16倍申请内存。
gzip_min_length 1024;#允许压缩最小页面的字节数,页面字节数从header头的content_Length中获取.默认值为0,表示不管页面有多大都进行压缩.建议大于1KB.
gzip_proxied any;#无条件启用压缩
gzip_disable "msie6";#(IE5.5和IE6 SP1使用msie6参数来禁止gzip压缩 )指定哪些不需要gzip压缩的浏览器(将和User-Agents进行匹配),依赖于PCRE库
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript;
nginx expires作用介绍:
在网站找开发和运营中,视频,图片,CSS,JS等网站元素的更改机会较少,特别是图片,这时可以将图片设置在客户浏览器本地缓存265天或3650天,而将CSS,JS,HTML等 代码缓存10-30天.
通过location URI规则将需要缓存的扩展名罗列出来,然后指定缓存的时间.如果针对所有内容设置缓存也可以不用location.
nginx默认安装expires功能
添加expires功能范例:
location ~.*\.(git|jpg|jpeg|png|bmp|swf)$ {
expires 2650d;
}
#意思是当用户访问ur结尾的文件扩展名为上述指定类型的图片时,设置缓存3650天,即1年.
location ~ .*\.(js|css)?$
{
expires 30d;
}
#意思是当前用户访问网站url结尾的文件扩展名为js,css类型元素进,设置存存30天.
不记录访问日志:
location ~.*\.(js|jpg|JPG|jpeg|JPEG|css|bmp|gif|GIF)$
{
access_log off;
}
#这里用location标签 匹配不记录日志的元素扩展名,然后关掉日志.
nginx 站点目录文件URL访问控制:
禁止解析指定目录下的指定程序:
location ~ ^/images/.*\.(php|php5|sh|pl|py)$
{
deny all;
} location ~ ^/static/.*\.(php|php5|sh|pl|py)$
{
deny all;
}
location ~* ^/data/(attachment|avatar)/.*\.(php|php5)$
{
deny all;
}
nginx下配置禁止访问*.txt,*.doc文件:
location ~* \.(txt|doc)$
{
if (-f $request_filename) {
root /data/www/www;
#rewrite ..... 可以重定向到某个URL
break;
}
}
location ~* \.(txt|doc)$
{
root /data/www/www;
deny all; }
禁止访问指定目录下的所有文件和目录:
location ~ ^/(static)/ {
deny all;
}
location ~ ^/static {
deny all; }
禁止访问多个目录的命令如下:
location ~ ^/(static|js) {
deny all
}
禁止访问目录并返回指定HTTP状态码:
server {
listen 80;
server_name www.book.com;
root /data0/www/www;
index index.html index.htm;
access_log /app/logs/www_access.log commonlog;
location /admin/ {return 404;}
location /tmplates/ {return 403}; }
限制网站来源IP访问:
使用ngx_http_access_module (static)限制网站来源IP访问
location ~ ^/bass/ {
allow 22.123.21.11;
deny all;
}
location ~ .*\.(php|php5)?$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
限制指定IP或IP段访问:
location / {
deny 192.168.1.1;
allow 192.168.1.0/24;
allow 10.1.1.0/16;
deny all; }
nginx反向代理的时候可以限制客户端IP:
if ( $remote_addr = 10.0.0.7 ) {
return 403;
}
if ( $remote_addr = 218.1.6.123 ) {
set $allow_access_root 'true';
}
tengine 的优化的更多相关文章
- web站点优化之使用tengine搭建静态资源服务器,静态资源合并加载案例剖析
在一个项目还是单体架构的时候,所有的js,css,image都会在一个web网站上,看起来并没有什么问题,比如下面这样: 但是当web网站流量起来的时候,这个单体架构必须要进行横向扩展,而在原来的架构 ...
- tengine编译安装及nginx高并发内核参数优化
Tengine Tengine介绍 Tengine是由淘宝网发起的Web服务器项目.它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性. Tengine的性能和稳定性已经在大型的 ...
- 优化 Tengine HTTPS 握手时间
背景 网络延迟是网络上的主要性能瓶颈之一.在最坏的情况下,客户端打开一个链接需要DNS查询(1个 RTT),TCP握手(1个 RTT),TLS 握手(2个RTT),以及最后的 HTTP 请求和响应,可 ...
- nginx(tengine)的一些小优化(持续更新)
1.nginx日志切割脚本 需求来源:nginx本身并没有日志切割的功能,由访问产生的大日志很难进行分析. 实现目的:每天对nginx日志进行切割,并备份至指定文件夹. 简要指令: mv /usr/l ...
- Tengine 安装配置全过程
Tengine官网上有个非常简单的教程,中间并未涉及到一些常用的设置,所以仅供参考.一下午为本人的安装步骤及过程. 1.安装必要的编译环境好 由于Tengine安装需要使用源代码自行编译,所以在安装前 ...
- Tengine 常用模块使用介绍
Tengine 和 Nginx Tengine简介 从2011年12月开始:Tengine是由淘宝网发起的Web服务器项目.它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能 和特性. ...
- CentOS-6.5安装配置Tengine
一.安装pcre: cd /usr/local/src wget http://downloads.sourceforge.net/project/pcre/pcre/8.34/pcre-8.34.t ...
- 单机运行环境搭建之 --CentOS-6.5安装配置Tengine
一.安装pcre: cd /usr/local/src wget http://downloads.sourceforge.net/project/pcre/pcre/8.34/pcre-8.34 ...
- 使用nginx-http-concat优化网站响应
前言: 我们在访问淘宝的时候,会看到代码中的js和css文件是通过一次请求或得的,我们知道浏览器一次请求只能并发访问数个资源,这样的处理错输在网络传输层面可以大大节省时间,这里使用的技术就是把css. ...
随机推荐
- ysql怎么处理百分数? “%”
)将百分数转化为小数,再以浮点数数据类型float输入 )设置字段类型为varchar数据类型,将百分数输入为文本数据,需要计算或提取出来的时候,再转化为数值类型 //转换数据类型
- java 怎么实现接收控制台输入?
//接收键盘输入: //怎么实现接收控制台输入? import java.util.Scanner; //Test.java import java.util.Scanner; public clas ...
- 特殊字符导致json字符串转换成json对象出错
在对数据库取出来的数据(特别是描述信息)里面含有特殊字符的话,使用JSON.parse将json字符串转换成json对象的时候会出错,主要是双引号,回车换行等影响明显,左尖括号和右尖括号也会导致显示问 ...
- Makefile 和 CMakeLists.txt
Makefile Makefile 的格式 target: prerequisites [tab]command 例子 #Makefile all:chap1 chap2 chap1: - - - : ...
- awbeci—一个帮助你快速处理日常工作的网址收集网站
大家好,我是awbeci作者,awbeci网站是一个能够快速处理日常工作的网址收集网站,为什么这样说呢?下面我将为大家介绍这个网站的由来,以及设计它的初衷和如何使用以及对未来的展望和计划,以及bug反 ...
- Lua编程笔记
迭代器并没有真正的迭代,真正迭代的是for循环.而迭代器为每次迭代提供成功后的返回值. function allwords(f)for line in io.lines do for word in ...
- ubuntu安装包查找及安装
官方包源: http://packages.ubuntu.com/ ubuntu下当前安装的包保存在在:/var/cache/apt/archives ubuntu下当前安装的运用: /usr/sha ...
- 【虚拟化系列】VMware vSphere 5.1 虚拟机管理
在上一博文中我们安装了强大的VMware vCenter管理中心,通过VMware vSphere Client连接到VMware vCenter管理中心, vSphere 的两个核心组件是 ...
- linux中DHCP服务配置文件/etc/dhcpd.conf详细说明
DHCP服务的配置 dhcpd.conf 是DHCP服务的配置文件,DHCP服务所有参数都是通过修改dhcpd.conf 文件来实现,安装后dhcpd.conf 是没有做任何配置的,将/usr/sha ...
- 树莓派进阶之路 (027) - 在Linux中增加swap空间
原贴地址:http://blog.csdn.net/chinalinuxzend/article/details/1759593 在Linux中增加swap空间 在安装Linux的时候,不知道swa ...