Nginx模块安装配置
Nginx模块安装配置
参考
查看nginx安装了哪些模块
https://blog.51cto.com/u_16213645/7981395
nginx查看默认安装的模块
https://www.kancloud.cn/vim26/v1/717246
Nginx限流配置--limit_req和limit_conn (防范DDOS攻击)
一、查看nginx安装的模块
在命令行中运行以下命令:
nginx -V
查看输出中的 --with- 参数,这些参数后面通常会跟着模块名称,比如--with-http_ssl_module表明SSL模块已安装。
如果你想要获取更加详细的模块列表,可以查看Nginx的配置文件,通常在/etc/nginx/nginx.conf,或者在编译Nginx时生成的config.log文件。
例如,查看/etc/nginx/nginx.conf文件中的load_module指令,可能会加载额外的模块文件。
cat /etc/nginx/nginx.conf | grep load_module
如果你想要获取动态模块的信息,可以使用如下命令:
nginx -V 2>&1 | tr ' ' '\n' | grep -- '--add-module'
这将列出所有通过--add-module参数添加的外部模块的路径。
查看nginx软件包里的auto文件夹里的option文件,带YES的表示默认安装时候自带的模块. 这些模块使用-V是查看不到的.
root@sb-esxi-apt-131:/usr/local/nginx-1.6.3/auto# cat options |grep "YES"
二、nginx 安装模块
Nginx 自带的模块通常是编译时内置的,无法通过 apt
安装来增加。如果你需要更多的模块,需要从源代码编译 Nginx,并在编译时添加所需的模块。
以下是编译安装 Nginx 并添加额外模块的基本步骤:
1、安装编译工具和依赖库:
sudo apt update sudo apt install build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev
2、下载相应的版本
wget http://nginx.org/download/nginx-1.20.1.tar.gz tar -zxvf nginx-1.20.1.tar.gz cd nginx-1.20.1/
3、配置要添加的模块
./configure --add-module=/path/to/your/module
4、编译并安装
make sudo make install
三、nginx限流
nginx限流可以有两种方式,包括限制并发连接数和你需要的限制访问频率,限制访问频率使用的是limit_req_zone模块。
针对你需要设置限制访问频率的虚拟服务,针对相应的server使用语法为“limit_req_zone key zone rate”的配置即可。
server块外
limit_req_zone $binary_remote_addr zone=rateLimit:1m rate=5r/s;
按照客户端ip进行限流,1m空间存储16000个ip,每秒5个连接。
server块内:
limit_req zone=rateLimit burst=10 nodelay;
表示超过访问频率的先放入大小为10的缓冲区,当该缓冲区满了的时候,nodelay直接返回503,否则等待排队。
配置如下表示:
`limit_req_zone`用于定义一个名为`rate_limit`的限制区域,将客户端IP地址作为键,并设置限制区域的大小为10MB,限制频率为10个请求每秒。
在`location`块中使用`limit_req`指令来应用限流策略。`burst`参数表示在达到限制频率时,允许的最大突发请求数量,`nodelay`参数表示不延迟请求,即超过限制频率的请求将立即返回503错误。
上述配置将每个客户端IP地址的请求限制为每秒最多10个请求,允许最大突发请求数量为20个,并在超出限制时立即返回503错误。
http { limit_req_zone $binary_remote_addr zone=rate_limit:10m rate=10r/s; server {
... location / { limit_req zone=rate_limit burst=20 nodelay; ... } } }
请求限流
语法:limit_req zone=name [burst=number] [nodelay | delay=number]; 默认值:- 上下文:http、server、location
limit_req_zone $binary_remote_addr zone=ip_limit:10m rate=10r/s;
limit_req_zone 只能在 http 块中使用。
参数1:$binary_remote_addr 表示通过 remote_addr 这个标识来做限制,限制的是同一客户端 IP 地址。
参数2:zone=ip_limit:10m 表示一个 10M 大小的名字为 ip_limit 的内存区域,主要用来存储访问的频次信息。
参数3:rate=10r/s 表示允许相同标识客户端的一个访问频次,10r 意思是10次。
limit_req zone=ip_limit burst=5 nodelay;
参数1:zone 表示使用哪个区域来做限制。
参数2:burst 爆发的意思,burst=5 表示设置一个为 5 的缓冲区,当有大量请求超过访问频次限制时先放入到缓冲区中。
参数3:nodelay 表示求超过访问频次限制并且缓冲区也占满时就会直接返回503,如果没有设置则所有请求会排队等待。
连接限流
语法:limit_conn zone number
默认值:-
上下文:http、server、location
limit_conn_zone $binary_remote_addr zone=ip_limit:10m
参数1:$binary_remote_addr 表示通过 remote_addr 这个标识来做限制,限制的是同一客户端 IP 地址。
参数2:zone=ip_limit:10m 表示一个 10M 大小的名字为 ip_limit 的内存区域,主要用来存储访问的频次信息。
limit_conn addr 1; limit_rate 50k;
参数1:addr 1 表示允许相同标识客户端的并发数为1,这里的 1 代表的是只允许每个 IP 地址 1 个连接。
参数2:limit_rate 50k 限制带宽。