Nginx模块安装配置

Nginx模块安装配置

参考

查看nginx安装了哪些模块

https://blog.51cto.com/u_16213645/7981395

nginx查看默认安装的模块

https://www.kancloud.cn/vim26/v1/717246

Nginx限流配置--limit_req和limit_conn (防范DDOS攻击) 

https://www.cnblogs.com/andrew-303/p/12272099.html

一、查看nginx安装的模块

要查看Nginx安装了哪些模块,可以使用Nginx的二进制文件运行nginx -V命令。这将输出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 限制带宽。

 

 

 

 

 

 

 

hfghgfh
posted @ 2024-04-10 16:14  fieldtianye  阅读(109)  评论(0编辑  收藏  举报