连接数优化:
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。