nginx复习008 配置优化

—–nginx配置优化

–什么是配置优化
软件的配置优化,是指在 硬件资源 允许的前提下,将硬件资源集中到特定的工作中

其本质是 减少 为其他工作保留的 余力,
来换取在 指定工作 上的 性能提升.

–nginx默认设置是为了平衡各种工作场景而准备的通用方案,
在特定工作中并不能发挥最后的性能.

举例:
手机的存储空间有限,如何分配?
一般用户:各种类型的资料,所占空间均衡
用户喜欢玩游戏:将大部分空间用来安装游戏
用户喜欢看电影:将大部分空间用来下载电影
用户喜欢听音乐:将大部分空间用来下载音乐
用户喜欢摄影:将大部分空间用来拍照和录制视频

–对于大型网站,往往需要大量的服务器协同工作
特点:各类服务器分工明确,职责单一
如:
负载均衡服务器:支持大量客户端并发连接
存储服务器:支持海量数据存储
数据库服务器:安全,稳定
缓存服务器:极高的存取速度

–连接数优化

1> 如何测试服务器的并发能力
当nginx作为负载均衡服务器时,能够接收的并发连接应该越多越好
那么如何测试一台服务器所能承受的并发连接能力?
可以使用web服务器的压力测试工具
常见的工具有:http_load, webbench, ApacheBench, Siege

这里以ApacheBench为例:
该工具可以在一台计算机中向一个url地址发送大量的并发请求,
然后检测服务器响应这些请求花费了多少时间,有多少请求处理失败.

利用ApacheBench可以模拟一台服务器被大量客户端并发连接的情况,
以测试服务器的并发能力

2> 使用ApacheBench工具
在客户端中切换到Apache安装目录的bin目录,
该目录下的ab程序就是ApacheBench工具
cd /usr/local/apache2/bin

ab命令的选项”-n”表示发送的请求总数,”-c”表示并发数:
./ab -n10 -c2 http://192.168.152.133
后面的网址是请求的服务器url地址
备注:apache目前只能使用http1.0协议进行请求

3> 查看ApacheBench测试报告

–查看linux文件打开限制
ulimit -a | grep open
–修改linux文件打开限制
ulimit -n 临时
修改/etc/profile 永久

4> 优化nginx连接数

worker_processes  auto;
worker_rlimit_nofile 65535;
events {
    worker_connections 65535;
    multi_accept on;
}

worker_processes 指令用于指定工作进程的个数,设置为auto是nginx会根据cpu的核心数来控制
worker_rlimit_nofile 用于设置最多打开的文件数量
worker_connections 用于设置每个工作进程可接收的连接数
multi_accept 表示是否允许一个工作进程响应多个请求
备注:在nginx配置文件中调整最大连接数后即可生效
无需更改系统的ulimit配置的数值

–nginx支持select, poll, kqueue, epoll等多种类型的连接处理方式
在默认情况下回自动选择最合适系统的方式

将错误基本设置为info时,就可以查看当前nginx使用的连接处理方式

epoll是linux平台上性能非常高的一种多路I/O复用模型
在系统内核和glibc(c运行库)支持的情况下,nginx会自动使用epoll方式

–手动设置

events {
    use epoll;
}

—–客户端请求限制
1> 什么情况下需要限制客户端的请求
在完成nginx连接数优化后,有一个问题值得注意:

在真实上线环境中,如果服务器遇到同一ip地址发送了2000个并发请求,
很有可能是遇到了网络攻击,
如果没有任何防御措施,会消耗服务器大量的资源.

企业一般会通过部署专业的防火墙设备来阻挡攻击,
而nginx本身也具有这样的功能,利用nginx可以对客户端的请求进行限制

2> 限制同一个ip的并发数

http {
    limit_conn_zone $binary_remote_addr zone=perip:10m;
    limit_conn perip 10;

}

limit_conn_zone指令:
用于开辟一个共享内存空间保存客户端ip,空间名称为perip,空间大小为10M
limit_conn指令:用于限制连接数量
$binary_remote_addr 保存了用二进制表示的当前客户端ip地址
以上配置表示nginx对于同一个ip地址只允许10个并发连接,
当超过时返回503(服务器暂时不可用)错误
–limit_conn指令也可用在server和location块中,实现不同级别的控制.

3> 限制虚拟主机的并发数

http {
    limit_conn_zone $server_name zone=perserver:10m;
    server{
        listen 80;
        server_name localhost;
        limit_conn perserver 20;
    }
}

4> 限制响应的传输速率
涉及的指令 limit_rate
context: http server location “if in location”

http {
    limit_rate 100k;
    limit_rate_after 10m;
}

limit_rate指令:
用于现在每个连接的传输速率
limit_rate_after指令:
用于在已经传输了指定大小的数据后再进行限速.
从而实现只针对大文件限制下载速度.

–创建一百兆的测试文件

dd if=/dev/zero of=100mb.test bs=1M count=100

dd用于按照指定大小的块复制文件 if表示输入文件 of表示输出文件
bs表示每个块的大小,count表示块的数量
输入文件/dev/zero是一个可以无限读取出空字符(即ASCII的0)的虚拟文件
读取后会保存到当前目录下的100mb.test文件中

–测试
wget http://192.168.152.133/100mb.test
由于wget显示的下载速度是平均值,所以会看到速度减慢的过程,但实际并不是匀速下降的.

—–浏览器缓存优化

1> http协议中的缓存机制
服务器可以通过http响应消息控制浏览器缓存
和缓存相关的响应头有:Expires Cache-Control ETag Last-Modified等.
Last-Mondified和ETag由nginx自动生成

Last-Modified: 表示最后修改的时间
ETag: 用于浏览器判断内容有无改变
Cache-Control: 比较复杂,通常根据时间需要进行控制
Expires: 表示改资源的过期时间,如果没有过期则浏览器不会发起http请求

–在优化浏览器缓存时,通常会对静态资源进行优化

–配置静态资源过期时间

server {
    location ~ \.(gif|jpg|jpeg|png|bmp|swf)$ {
        expires      30d;
    }
    location ~ \.(css|js)$ {
        expires      12h;
    }
}

–浏览器也会自动缓存静态文件,基于常见的静态资源扩展名自动缓存.

猜你喜欢

转载自blog.csdn.net/eebaicai/article/details/81323397