基于Nginx的Web服务器优化的应用研究
摘 要:随着互联网的快速发展,人们对网站的访问量也随着日益增长,越来越多的Web服务器经常处于高并发访问状态,导致服务器性能快速下降,甚至系统崩溃的严重后果。如何在硬件资源允许的前提下,通过软件的配置支持高并发访问成为了当前亟待解决的重要课题。本文尝试使用Nginx搭建Web服务器并对Nginx的连接數和客户访问限制方面进行优化测试研究,对帮助和改善Web服务器的高并发性能起到一定的积极作用。
关键词:Web服务器;Nginx;性能优化
随着互联网的快速发展,人们对网站的访问量也随着日益增长,越来越多的Web服务器经常处于高并发访问状态,导致服务器性能快速下降,甚至会造成整个服务器系统崩溃的严重后果。如何在硬件资源允许的前提下,通过软件的配置使Web服务器支持高并发访问成为了当前亟待解决的重要课题。
近几年来Nginx因为具有轻量级和高并发的特点,国内如百度、淘宝、腾讯、新浪和网易等网站都开始使用Nginx来满足一些高并发访问的需求[1]。
本文尝试使用Nginx搭建Web服务器,并对Nginx在提高客户端连接数、客户请求数限制和浏览器缓存等方面优化测试进行应用研究。
1 测试环境准备
1.1 搭建Web系统
测试环境使用VMware部署两台安装CentOS7操作系统的虚拟机,作为Web系统的服务器端和客户端。在完成两台Linux虚拟机的IP地址分配任务后,在Linux虚拟机1安装Nginx,在Linux虚拟机2安装Apache,即Linux虚拟机1通过运行Nginx充当Web服务器,Linux虚拟机2作为客户端,测试环境如图1所示。
1.2 服务器端创建测试网站
在Web服务器创建一个测试网站,客户端使用域名方式访问该测试网站。
(1)在服务器端的nginx.conf文件中http块内添加一个使用www.ng.test域名的虚拟主机;
(2)在客户端添加一条域名解析记录(192.168.100.1www.ng.test);
(3)在客户端的浏览器使用域名方式访问网站。
2 使用Nginx优化Web服务器
Nginx的默认设置是为了平衡Web服务器的各种工作场景而准备的通用方案,在特定工作中并不一定能发挥最佳的性能。本文对客户端访问Web服务器的连接数、客户端请求限制等方面进行性能调优测试,即验证了Nginx的高并发的特点,又能改善Web服务器性能[1]。
2.1 Nginx的连接数优化测试
2.1.1 修改Linux系统的连接数限制
因为Linux系统把进程的连接数当作文件处理,一个进程的连接数不能超过1024[1]。如果要使客户端和服务器端支持高并发连接数,必须修改进程数量的限制,具体命令如下:
[root@client~]#ulimit-n 65535
2.1.2 修改Nginx的连接数限制
Nginx运行时允许存在多个工作进程,工作进程的数目可以在nginx.conf文件中指定,通常设置为CPU的核心数[2]。为了使Nginx能够承载更高的连接数,需要修改nginx.conf文件中与连接数限制相关的参数。具体命令如下:
http {
……
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表示是否允许一个工作进程响应多个请求。
2.1.3 客户端高并发访问服务器端测试
在客户端使用Apache的ApacheBench工具向服务器端发送并发连接数是5000的访问请求,具体命令如下:
[root@client~]#cd/usr/local/apache2/bin
[root@client bin]#./ab-n5000-c5000 http://www.ng.test/
说明:ab命令的选项-n表示发送的连接数,-c表示并发数,http://www.ng.test/表示请求的服务器URL地址。
测试结果出现如下信息:
Complete requests: 5000
Failed requests: 0
从测试结果显示可以看出Nginx成功接收5000的并发连接请求。
2.2 客户端请求限制测试
以上客户端对服务器的高并发连接测试是通过同一个主机向服务器发送的高并发连接请求,在实际应用中如果出现这种情况,这很可能是遭受网络攻击,会消耗服务器大量的资源。为了避免这种危险情况的出现,Nginx可以对来自同一IP地址的客户端请求数和传输速率进行限制。
2.2.1 限制同一个IP的请求数
服务器端通过nginx.conf文件的limit_req指令可以限制来自单个IP地址的请求处理频率,具体配置如下:
http {
……
limit_req_zone $binary_remote_addr zone=creq:10m rate=1r/s;
server {
listen 80;
server_name localhost;
location /{
root html/test;
index index.html;
limit_req zone=creq burst=1;
}
}
……
}
說明:limit_req_zone指令用于开辟一个共享内存空间保存客户端IP,空间名称为creq,空间大小为10M;预定义变量$binary_remote_addr保存了用二进制表示的当前客户端IP地址;limit_req指令用于限制请求数量。
在客户端使用ApacheBench工具进行并发测试,测试结果看到100个请求中有98个是失败的。
[root@client bin]#./ab-n100-c100 http://www.ng.test/
Complete requests:100
Failed requests: 98
2.2.2 限制响应的传输速率
服务器端通过nginx.conf文件的limit_rate指令可以限制服务器在响应时传输数据到客户端的速率,具体配置如下:
http {
……
server {
……
limit_rate 100k;
……
}
}
说明:limit_rate用于限制每个连接的传输速率。
为了测试限速是否生效,在测试网站根目录下放置一个大容量的测试文件,在客户端使用wget命令下载,具体操作如下:
[root@client~]# wget http://www.ng.test/libmcrypt-2.5.8.tar.gz
……
100%[============================>]1,335,178 100KB/s in 13s
……
从测试结果看出下载速度基本维持在100KB/s左右。
通过以上对Nginx做连接数和客户访问限制方面进行优化测试分析,对帮助和改善Web服务器的高并发性能起到一定的积极作用。
参考文献:
[1]黑马程序员Nginx高性能Web服务器实战教程.清华大学出版社,2017.
[2]岳晋,温宇,黄旻亮.Windows环境下的Nginx高并发实现.电子技术与软件工程,2019(17):47.
作者简介:李若兰(1977— ),女,壮族,广西来宾人,柳州铁道职业技术学院专任教师,讲师,主要研究方向:计算机网络、数据存储、云计算技术与应用等。