温馨提示×

LNMP中Nginx如何限制访问频率

小樊
68
2025-03-24 10:03:54
栏目: 编程语言

在LNMP(Linux, Nginx, MySQL, PHP)架构中,Nginx可以通过配置文件来限制访问频率,以防止恶意访问和保护服务器资源。以下是一些常用的方法来限制访问频率:

1. 使用 limit_req_zonelimit_req

limit_req_zone 指令用于定义一个共享内存区域来存储请求计数器,而 limit_req 指令用于限制请求速率。

配置示例:

http {
    # 定义一个共享内存区域来存储请求计数器
    limit_req_zone $binary_remote_addr zone=mylimit:10m rate=1r/s;

    server {
        listen 80;
        server_name example.com;

        location / {
            # 应用限制请求速率
            limit_req zone=mylimit burst=5 nodelay;
            ...
        }
    }
}
  • $binary_remote_addr:使用客户端的IP地址作为键。
  • zone=mylimit:10m:定义一个名为 mylimit 的共享内存区域,大小为10MB。
  • rate=1r/s:每秒允许的最大请求数为1。
  • burst=5:允许短时间内的突发请求达到5个。
  • nodelay:不延迟处理请求,立即处理突发请求。

2. 使用 ngx_http_limit_conn_module

ngx_http_limit_conn_module 模块可以限制每个客户端的并发连接数。

配置示例:

http {
    # 定义一个共享内存区域来存储连接计数器
    limit_conn_zone $binary_remote_addr zone=addr:10m;

    server {
        listen 80;
        server_name example.com;

        location / {
            # 应用限制并发连接数
            limit_conn addr 5;
            ...
        }
    }
}
  • $binary_remote_addr:使用客户端的IP地址作为键。
  • zone=addr:10m:定义一个名为 addr 的共享内存区域,大小为10MB。
  • limit_conn addr 5:每个客户端最多允许5个并发连接。

3. 使用 ngx_http_limit_req_modulengx_http_limit_conn_module 组合

可以同时使用这两个模块来更精细地控制访问频率和并发连接数。

配置示例:

http {
    # 定义共享内存区域
    limit_req_zone $binary_remote_addr zone=mylimit:10m rate=1r/s;
    limit_conn_zone $binary_remote_addr zone=addr:10m;

    server {
        listen 80;
        server_name example.com;

        location / {
            # 应用限制请求速率和并发连接数
            limit_req zone=mylimit burst=5 nodelay;
            limit_conn addr 5;
            ...
        }
    }
}

4. 使用第三方模块

Nginx还有一些第三方模块,如 ngx_http_limit_conn_modulengx_http_limit_req_module 的增强版本,可以提供更复杂的访问控制功能。

注意事项

  • 配置文件修改后需要重新加载Nginx配置:sudo nginx -s reload
  • 根据实际需求调整 rateburstlimit_conn 的值。
  • 确保Nginx有足够的内存来存储共享内存区域。

通过以上方法,可以有效地限制Nginx的访问频率,保护服务器免受恶意访问和资源耗尽的影响。

0