在CentOS上使用LNMP(Linux, Nginx, MySQL, PHP)搭建的服务器,可以通过多种方式实现流量控制。以下是一些常见的方法:
Nginx提供了ngx_http_limit_req_module
和ngx_http_limit_conn_module
模块来实现请求速率限制和连接数限制。
编辑Nginx配置文件(通常是/etc/nginx/nginx.conf
或/etc/nginx/conf.d/default.conf
),添加以下配置:
http {
...
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=1r/s;
server {
...
location / {
limit_req zone=mylimit burst=5;
...
}
}
}
解释:
limit_req_zone
定义了一个共享内存区域mylimit
,用于存储每个IP地址的请求计数。rate=1r/s
表示每秒允许1个请求。burst=5
表示允许突发5个请求。同样在Nginx配置文件中,添加以下配置:
http {
...
limit_conn_zone $binary_remote_addr zone=addr:10m;
server {
...
location / {
limit_conn addr 10;
...
}
}
}
解释:
limit_conn_zone
定义了一个共享内存区域addr
,用于存储每个IP地址的连接数。limit_conn addr 10
表示每个IP地址最多允许10个并发连接。Fail2Ban是一个入侵防御软件框架,可以监控日志文件并根据规则禁止恶意IP地址。
sudo yum install fail2ban -y
编辑Fail2Ban的配置文件(通常是/etc/fail2ban/jail.local
),添加以下配置:
[DEFAULT]
bantime = 600
findtime = 600
maxretry = 3
[nginx]
enabled = true
filter = nginx
action = iptables-multiport[name=SSH, port="http,https", protocol=tcp]
logpath = /var/log/nginx/access.log
解释:
bantime
表示禁止IP地址的时间(秒)。findtime
表示在多长时间内检查一次日志文件。maxretry
表示允许的最大失败次数。filter
指定使用的过滤器。action
指定执行的动作。logpath
指定要监控的日志文件路径。如果你使用Cloudflare或其他CDN服务,可以利用它们的流量控制和DDoS保护功能来限制流量。
在Cloudflare的Page Rules中设置规则,限制特定IP地址或IP范围的访问。
MySQL也提供了连接数限制的功能,可以在MySQL配置文件(通常是/etc/my.cnf
或/etc/mysql/my.cnf
)中进行设置:
[mysqld]
max_connections = 150
解释:
max_connections
表示MySQL服务器允许的最大并发连接数。通过以上方法,你可以在CentOS上使用LNMP搭建的服务器实现流量控制。根据具体需求选择合适的方法,可以有效地保护服务器免受恶意攻击和过载。