nginx 访问限制与访问控制的实现
作者:Bean295
一、nginx 访问限制
1、ngx_http_limit_req_module
(1) 作用:限制单位时间内来自特定IP的请求次数。
(2) 启动请求频率限制:
① 未限制情况下进行访问:
安装压测工具:yum install -y httpd-tools
命令:ab -n 100 -c 10 http://a.com/
ab 是 apache 进行性能测试的工具 ;-n 100 -c 10:总共100次,分10次发送给 a.com
② 启动限制,在主配置文件里定义限制规则:
limit_req_zone $binary_remote_addr zone=req_zone:10m rate=1r/s;
- limit_req_zone:定义限制规则
- $binary_remote_addr:远程的客户端地址
- zone=req_zone:10m 创建一个叫'req_zone'的存储区域,并分配10M的内存
- rate=1r/s:请求速率限制
在 a 网站的配置文件中引用限制规则:
③ 重启服务并测试
观察错误日志:
2023/09/14 21:06:02 [error] 3538#3538: *100 limiting requests, excess: 0.991 by zone "req_zone", client: 192.168.198.133, server: a.com, request: "GET / HTTP/1.0", host: "a.com"
④ ngx_http_limit_req_module 与 ngx_http_limit_conn_module 的区别:
ngx_http_limit_req_module:请求频率限制,限制客户端请求的速率;
ngx_http_limit_conn_module:连接频率限制,限制某个 ip 同时建立的连接数量。
2、常见的网站压力测试工具
① Apache JMeter:Apache JMeter是一个开源的Java应用程序,用于执行各种性能测试,包括负载测试、压力测试、功能测试等。
② LoadRunner:HP LoadRunner是一款商业性能测试工具,用于模拟大规模用户负载并监测应用程序性能
③ Gatling:Gatling是一个开源的性能测试工具,使用Scala编写,专注于高并发场景。
④ Apache Benchmark (ab):Apache Benchmark是一个命令行工具,用于进行基本的HTTP压力测试。它通常与Apache Web服务器一起使用,但也可用于测试其他Web服务器。
⑤ Locust:Locust是一个开源的Python性能测试工具,允许使用Python代码定义和执行负载测试场景。
⑥ Siege:Siege是一个开源的命令行工具,用于进行HTTP压力测试。具有简单的语法和配置,且易于使用。
二、nginx 访问控制
1、基于主机(ip 访问控制)
(1) 模块:ngx_http_access_module
(2) 语法:
配置允许或禁止访问的 ip 地址或网段
syntax: access_module [on | off] | deny address | allow address;
context: http, server, location, limit_except;
(3) 启用控制
启用访问控制后,只有特定主机才能访问 nginx 服务器。
观察错误日志:
2023/09/14 23:24:04 [error] 4916#4916: *2 access forbidden by rule, client: 192.168.198.128, server: a.com, request: "GET /favicon.ico HTTP/1.1", host: "a.com"
2、基于用户(username & password)
(1) 网站基础认证模块:ngx_http_auth_basic_module
(2) 语法:
独立存储一个加密文件,在服务器上调用加密文件
Syntax: auth_basic_user_file file;
Context: http, server, location, limit_except
(3) 启用控制
① 创建认证文件:htpasswd -cm /etc/nginx/conf.d/passwd user10
- htpasswd:进行身份密码验证的命令行工具
- -cm:创建一个新的密码文件
- /etc/nginx/conf.d/passwd user10:密码文件的路径和创建的用户名
② 启动认证
提示信息;认证文件路径
auth_basic "nginx access test";
auth_basic_user_file /etc/nginx/conf.d/passwd;
③ 重启并验证
客户机上访问 a.com:
认证成功可进入 a 网站
若不进行身份验证,则网站返回状态码 401(客户端未提供有效身份信息)
三、HTTP 协议
1、HTTP简介
(1) Hyper Text Transfer Protocol,超文本传输协议,是一种建立在TCP上的 请求-响应 协议。
(2) 工作流程:客户端发送一个HTTP请求,服务端收到请求之后,根据请求做出相应的动作访问服务器资源,最后发送HTTP响应把结果返回给客户端。
一个请求的开始到一个响应的结束称为事务,当一个事务结束后会在服务端添加一条日志条目。
(3) 组件系统:
① 客户端:通常是 Web 浏览器,负责发送 HTTP 请求并接收 HTTP 响应;
② 服务器:接收来自客户端的 HTTP 请求,处理请求并返回 HTTP 响应。服务器通常由Web服务器软件构成,例如 Apache、Nginx 等;
③ Proxies/代理服务器:Proxies或代理服务器是介于客户端和服务器之间的中间组件,用于处理HTTP请求和响应。
(4) 报文:
① 请求报文:请求报文是客户端向服务器发送的报文,请求报文由请求行、请求头部和请求体三部分组成:
- 请求行:由请求方法字段、URL字段和HTTP协议版本字段3个字段组成,用空格分隔。例如,GET /index.html HTTP/1.1
GET:请求方法之一,当点击网页上的链接或者通过在浏览器的地址栏输入网址来浏览网页的,使用的都是GET方式;
POST:POST方法可以在请求中包含一个请求体,以表单的形式向服务器提交数据。
② 响应报文:响应报文是服务器对请求报文的响应。响应报文包括响应行、响应头部和响应体三部分。
- 响应行:包含HTTP协议的版本、状态码和状态消息。例如,“HTTP/1.1 200 OK”,其中HTTP/1.1是协议版本,200是状态码,OK是状态消息。
2、URI
(1) URI 简介
统一资源标识符 (Uniform Resource Identifier,或URI) ,HTTP 请求的内容统称为"资源",每个资源都由一个 URI 来进行标识,URI 包含 URL、URN。
(2) URL
统一资源定位符(Uniform Resource Locator),也称为网页地址,用于定位。
URL 格式:
① 协议:网站协议是互联网上进行通讯、信息共享遵循的规则总称。
超文本传输协议(HTTP)文件传输协议(FTP)远程终端协议(Telnet)邮件处理协议(mailto)
② 主机:www.example.com(域名)或主机ip,表示向网络上的哪台主机发起请求。
③ 端口:表示访问 web 服务器上的资源的入口,HTTP 为 80,HTTPS 为 443
④ 路径:/path/to/file.html 是 web 服务器上存放资源的路径
⑤ 查询:?key1=value1&key2=value2 是提供给 Web 服务器的额外参数,用 & 符号分隔的键/值对列表。
⑥ 片段:#SomewhereInTheDocument 是资源本身的某一部分的一个锚点。锚点代表资源内的一种超链接,它给予浏览器跳转到锚点指示的内容。 例如,在HTML文档上,浏览器将滚动到定义锚点的位置上。
到此这篇关于nginx 访问限制与访问控制的实现的文章就介绍到这了,更多相关nginx 访问限制与访问控制内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!