nginx的preaccess 阶段的limit_req模块与limit_conn模块
limit_conn 模块限制并发连接数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | [root@python vhast] # vim limit_conn.conf limit_conn_zone $binary_remote_addr zone = addr: 10m ; #$binary_remote_addr 表示二进制格式IP地址;定义10M的共享内存 #limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; server { server_name test.limit.com; root html / ; location / { limit_conn_status 500 ; #当达到最大限制后,向用户返回一个错误码;默认503;修改为500 limit_conn_log_level warn; # limit_rate 5 ; #限制返回用户的速度没秒5个 字节 limit_conn addr 1 ; #为查看测试效果设置并发连接为1 #limit_req zone=one burst=1 nodelay; #limit_req zone=one; } } |
测试
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | [root@python vhast] # curl test.limit.com <!DOCTYPE html> <html> <head> <title>Welcome to nginx!< / title> <style> body { width: 35em ; margin: 0 auto; font - family: Tahoma, Verdana, Arial, sans - serif; } < / style> < / head> <body> <h1>Welcome to nginx!< / h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.< / p> <p>For online documentation and support please refer to <a href = "http://nginx.org/" >nginx.org< / a>.<br / > Commercial support is available at <a href = "http://nginx.com/" >nginx.com< / a>.< / p> <p><em>Thank you for using nginx.< / em>< / p> < / body> < / html> [root@python ~] # curl test.limit.com 同时请求第二连接 <html> <head><title> 500 Internal Server Error< / title>< / head> <body> <center><h1> 500 Internal Server Error< / h1>< / center> <hr><center>nginx / 1.15 . 9 < / center> < / body> < / html> |
限制一个连接每秒处理的请求数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | [root@python vhast] # vim limit_conn.conf limit_conn_zone $binary_remote_addr zone = addr: 10m ; #$binary_remote_addr 表示二进制格式IP地址;定义10M的共享内存 limit_req_zone $binary_remote_addr zone = one: 10m rate = 2r / m; # 设置共享内存为10M,每分钟处理2个请求 server { server_name test.limit.com; root html / ; location / { limit_conn_status 500 ; #当达到最大限制后,向用户返回一个错误码;默认503;修改为500 limit_conn_log_level warn; # #limit_rate 5; #限制返回用户的速度没秒50 字节 #limit_conn addr 1; #为查看测试效果设置并发连接为1 #limit_req zone=one burst=3 nodelay; # 定义可以接受请求池里最大可以接受用户3个请求,使用默认响应码 limit_req zone = one; #定义使用共享内存 } } |
测试 访问两次
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | [root@python vhast] # curl test.limit.com <!DOCTYPE html> <html> <head> <title>Welcome to nginx!< / title> <style> body { width: 35em ; margin: 0 auto; font - family: Tahoma, Verdana, Arial, sans - serif; } < / style> < / head> <body> <h1>Welcome to nginx!< / h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.< / p> <p>For online documentation and support please refer to <a href = "http://nginx.org/" >nginx.org< / a>.<br / > Commercial support is available at <a href = "http://nginx.com/" >nginx.com< / a>.< / p> <p><em>Thank you for using nginx.< / em>< / p> < / body> < / html> [root@python vhast] # curl test.limit.com <html> <head><title> 503 Service Temporarily Unavailable< / title>< / head> <body> <center><h1> 503 Service Temporarily Unavailable< / h1>< / center> <hr><center>nginx / 1.15 . 9 < / center> < / body> < / html> |
设置连接池
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | [root@python vhast] # cat limit_conn.conf limit_conn_zone $binary_remote_addr zone = addr: 10m ; #$binary_remote_addr 表示二进制格式IP地址;定义10M的共享内存 limit_req_zone $binary_remote_addr zone = one: 10m rate = 2r / m; # 设置共享内存为10M,每分钟处理2个请求 server { server_name test.limit.com; root html / ; location / { limit_conn_status 500 ; #当达到最大限制后,向用户返回一个错误码;默认503;修改为500 limit_conn_log_level warn; # #limit_rate 5; #限制返回用户的速度没秒50 字节 #limit_conn addr 1; #为查看测试效果设置并发连接为1 limit_req zone = one burst = 3 nodelay; # 定义可以接受请求池里最大可以接受用户3个请求,使用默认响应码 #limit_req zone=one; #定义使用共享内存 } } |
访问第五次生效
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 | [root@python vhast] # curl test.limit.com <!DOCTYPE html> <html> <head> <title>Welcome to nginx!< / title> <style> body { width: 35em ; margin: 0 auto; font - family: Tahoma, Verdana, Arial, sans - serif; } < / style> < / head> <body> <h1>Welcome to nginx!< / h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.< / p> <p>For online documentation and support please refer to <a href = "http://nginx.org/" >nginx.org< / a>.<br / > Commercial support is available at <a href = "http://nginx.com/" >nginx.com< / a>.< / p> <p><em>Thank you for using nginx.< / em>< / p> < / body> < / html> [root@python vhast] # curl test.limit.com <!DOCTYPE html> <html> <head> <title>Welcome to nginx!< / title> <style> body { width: 35em ; margin: 0 auto; font - family: Tahoma, Verdana, Arial, sans - serif; } < / style> < / head> <body> <h1>Welcome to nginx!< / h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.< / p> <p>For online documentation and support please refer to <a href = "http://nginx.org/" >nginx.org< / a>.<br / > Commercial support is available at <a href = "http://nginx.com/" >nginx.com< / a>.< / p> <p><em>Thank you for using nginx.< / em>< / p> < / body> < / html> [root@python vhast] # curl test.limit.com <!DOCTYPE html> <html> <head> <title>Welcome to nginx!< / title> <style> body { width: 35em ; margin: 0 auto; font - family: Tahoma, Verdana, Arial, sans - serif; } < / style> < / head> <body> <h1>Welcome to nginx!< / h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.< / p> <p>For online documentation and support please refer to <a href = "http://nginx.org/" >nginx.org< / a>.<br / > Commercial support is available at <a href = "http://nginx.com/" >nginx.com< / a>.< / p> <p><em>Thank you for using nginx.< / em>< / p> < / body> < / html> [root@python vhast] # curl test.limit.com <!DOCTYPE html> <html> <head> <title>Welcome to nginx!< / title> <style> body { width: 35em ; margin: 0 auto; font - family: Tahoma, Verdana, Arial, sans - serif; } < / style> < / head> <body> <h1>Welcome to nginx!< / h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.< / p> <p>For online documentation and support please refer to <a href = "http://nginx.org/" >nginx.org< / a>.<br / > Commercial support is available at <a href = "http://nginx.com/" >nginx.com< / a>.< / p> <p><em>Thank you for using nginx.< / em>< / p> < / body> < / html> [root@python vhast] # curl test.limit.com <html> <head><title> 503 Service Temporarily Unavailable< / title>< / head> <body> <center><h1> 503 Service Temporarily Unavailable< / h1>< / center> <hr><center>nginx / 1.15 . 9 < / center> < / body> < / html> [root@python vhast] # curl test.limit.com <html> <head><title> 503 Service Temporarily Unavailable< / title>< / head> <body> <center><h1> 503 Service Temporarily Unavailable< / h1>< / center> <hr><center>nginx / 1.15 . 9 < / center> < / body> < / html> |
两个模块同时启用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | [root@python vhast] # vim limit_conn.conf limit_conn_zone $binary_remote_addr zone = addr: 10m ; #$binary_remote_addr 表示二进制格式IP地址;定义10M的共享内存 limit_req_zone $binary_remote_addr zone = one: 10m rate = 2r / m; # 设置共享内存为10M,每分钟处理2个请求 server { server_name test.limit.com; root html / ; location / { limit_conn_status 500 ; #当达到最大限制后,向用户返回一个错误码;默认503;修改为500 limit_conn_log_level warn; # limit_rate 50 ; #限制返回用户的速度没秒50 字节 limit_conn addr 1 ; #为查看测试效果设置并发连接为1 #limit_req zone=one burst=3 nodelay; # 定义可以接受请求池里最大可以接受用户3个请求,使用默认响应码503 limit_req zone = one; #定义使用共享内存 } } |
测试;返回的是503,这是因为limit_req在limit_conn之前执行因为red模块以经向客户段返回了,所有不会向用户返回500
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | [root@python vhast] # curl test.limit.com <!DOCTYPE html> <html> <head> <title>Welcome to nginx!< / title> <style> body { width: 35em ; margin: 0 auto; font - family: Tahoma, Verdana, Arial, sans - serif; } < / style> < / head> <body> <h1>Welcome to nginx!< / h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.< / p> <p>For online documentation and support please refer to <a href = "http://nginx.org/" >nginx.org< / a>.<br / > Commercial support is available at <a href = "http://nginx.com/" >nginx.com< / a>.< / p> <p><em>Thank you for using nginx.< / em>< / p> < / body> < / html> [root@python ~] # curl test.limit.com <html> <head><title> 503 Service Temporarily Unavailable< / title>< / head> <body> <center><h1> 503 Service Temporarily Unavailable< / h1>< / center> <hr><center>nginx / 1.15 . 9 < / center> < / body> < / html> |
草都可以从石头缝隙中长出来更可况你呢
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏