nginx 优化

连接数优化:

apachebench 工具测试压力

# n 表示请求数 -c 表示并发数; 
./ab -n 500 -c 500 http://172.16.135.128/


1.Linux 系统默认限制了一个进程最多打开的文件数量。通过 ulimit -n 可以查看当前
2.优化 nginx 连接数
server {
    worker_processes auto;    # 指令用于指定工作进程的个数
    worker_rlimit_nofile 65535;    # 用于设置最多打开的文件数量;
events {
    multi_accept on;    #表示是否允许 一 个工作进程响应多个请求;
    worker_connections 65535;    #设置每个工作进程可接收的连接数;
}


}


Nginx 支持 select、polLkqueue、epoll 等多种类型的连接处理方式,在默认情况下会自 动选择最适合系统的方式 。 将错误日志级别设置为 info 时,可以查看当前 Nginx 使用的方式

客户端请求限制:

在真实上线环境中,如果服务器遇到同 一 个 IP 地址发送了 2000 个并发请求,很可能是遇到网络攻击,如果没有任何防御措施,会消耗服务器大量的资源 。企业一般会通过部署专业的防火墙设备来阻挡攻击,而 Nginx 本身也具有这样的功能。

1.限制同一个IP的并发数

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

# 通过 limit_conn 指令可以限制并发连接数,
limit_conn_zone 指令用于开辟一个共享内存空间保存客户端 IP,空间名称为 perip,空间大小为 lOMB;
limit_conn 指令用于限制连接数量;
$binary_remote_addr 预定义变量保存了用二进制表示的当前客户端 IP 地址。
上述配置生效后, Nginx 将对于同一个 IP 地址只允许 10 个并发连接,当超过时返回 503(服务暂时不可用)错误。limit_conn 指令也可以在 server 和 location 块中使用,用于实现不同级别的控制。


2.限制虚拟主机的并发数
在使用 limit_conn_zone 指令时,也可以用共享内存空间保存虚拟主机名($server_name),实现对虚拟主机的并发数进行限制
http {
    limit_conn_zone $server_name zone=perserver:10m;
    server {
        limit_conn perserver 20;
    }
}

为了测试虚拟主机并发限制是否有效,将前面的 IP 并发限制取消后,在客户端使用ApacheBench 工具进行并发测试,可以看到 100 个请求中只有 20 个是正常的 。
由于上述配置只针对 localhost 主机,如果测试其他虚拟主机,则没有并发限制 。

3.限制晌应的传输速率
Nginx 的 limit_rate 指令用于限制服务器在响应时传输数据到客户端的速率,可以在http、server、location、location 中的 if 块中使用 。

http {
    limit_rate 100k;
    limit_rate_after 10m;
}

limit_rate 用于限制每个连接的传输速 率 (每秒 lOOKB);
limit_ rate_after 用于在已经传输指定大小的数据后再进行限速,从而实现只针对大文件限制下载速度。如果省略 limit_rate_after指令,则无论文件大小是多少,都会进行限速。
在客户端下载了超过 lOMB 的数据后, Nginx 成功将下载速度限制为 lOOKB/s。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值