您的位置:

如何设置nginx禁止ip访问

一、为什么需要禁止IP访问?

在生产环境下,为了保障网站的安全,我们需要尽可能地屏蔽来自不信任的IP地址的访问。

恶意攻击者可以利用服务器的漏洞进行攻击,比如 SQL 注入、XSS攻击等,屏蔽访问能够有效减少攻击的风险。

而且,有些应用会实现 IP 黑名单、白名单等功能,可以有效管理访问权限。

二、如何设置IP访问屏蔽?

我们可以使用 Nginx 的模块,例如:ngx_http_access_module 和 ngx_http_limit_req_module 对 IP 地址进行屏蔽。

三、ngx_http_access_module 实现 IP 访问控制

ngx_http_access_module 模块提供了 allow 和 deny 指令,用于控制客户端对指定区域的访问权限。

只需要在 nginx 配置中的 server 或 location 区块中添加如下代码,就可以限制特定 IP 访问:

  location / {
      deny 192.168.1.1;
      allow 192.168.1.0/24;
      allow 10.1.1.0/16;
      deny all;
  }

这段代码中,deny 表示禁止访问,allow 表示允许访问。192.168.1.1 表示禁止的 IP 地址,192.168.1.0/24 表示允许的 IP 段,10.1.1.0/16 表示另外一个允许的 IP 段。

最后的 deny all 表示禁止所有其它 IP 地址的访问。

四、ngx_http_limit_req_module 限制IP请求频率

ngx_http_limit_req_module 模块可以限制 IP 的请求速率,有效防止 DDOS 攻击。只需要在 server 或 location 中添加如下代码:

    limit_req_zone $binary_remote_addr zone=mylimit:10m rate=1r/s;
  location / {
      limit_req zone=mylimit burst=5;
  }

这段代码中,limit_req_zone 指令定义了一个名为 mylimit 的共享内存区域,用于存储 IP 请求的速率信息。其中,$binary_remote_addr 表示客户端 IP 地址。

rate=1r/s 表示限制每秒钟只能访问一次。limit_req 指令中,burst=5 表示允许在每个时间间隔内最多有 5 个请求通过。

五、小结

本文介绍了如何使用 Nginx 实现 IP 访问屏蔽,包括 ngx_http_access_module 和 ngx_http_limit_req_module 两个模块的使用方法。在生产环境下,屏蔽不必要的 IP 访问可以有效预防黑客攻击,保护网站的安全。