Nginx实用插件

池兴邦
2023-12-01

Nginx实用插件

健康检查插件

主动检查内部上游的服健康状态插件,淘宝开源实现nginx_upstream_check_module

安装

cd ~
wget https://nginx.org/download/nginx-1.4.7.tar.gz
tar -xvzf nginx-1.4.7.tar.gz

wget https://github.com/yaoweibin/nginx_upstream_check_module/archive/v0.3.0.tar.gz
mv v0.3.0.tar.gz nginx_upstream_check_module-v0.3.0.tar.gz
tar -xvzf nginx_upstream_check_module-v0.3.0.tar.gz


sudo rm -rf /usr/local/nginx
cd /usr/local/nginx-1.16.0
sudo ./configure \
	--prefix=/usr/local/nginx \
    --sbin-path=/usr/local/nginx/nginx \
    --conf-path=/usr/local/nginx/conf/nginx.conf \
    --error-log-path=/usr/local/nginx/logs/error.log \
    --pid-path=/usr/local/nginx/pid/nginx.pid \
    --with-http_ssl_module \
    --with-openssl=/home/wesley/openssl-OpenSSL_1_0_2k \
    --add-module=/home/wesley/echo-nginx-module-0.61 \
    --with-http_stub_status_module \
    --add-module=/home/wesley/ngx_cache_purge-2.3 \
    --add-module=/home/wesley/nginx_upstream_check_module-0.3.0 
    
sudo make
sudo make install

配置

配置Nginx配置文件内容如下:

http {
    upstream cluster {
        # simple round-robin
        server 127.0.0.1:8080;
        server 127.0.0.1:8081;

        check interval=5000 rise=1 fall=3 timeout=4000;

        #check interval=3000 rise=2 fall=5 timeout=1000 type=ssl_hello;

        #check interval=3000 rise=2 fall=5 timeout=1000 type=http;
        #check_http_send "HEAD / HTTP/1.0\r\n\r\n";
        #check_http_expect_alive http_2xx http_3xx;
    }

    server {
        listen 80;

        location / {
            proxy_pass http://cluster;
        }

        location /status {
            check_status;
            access_log   off;
            allow 192.168.120.0/255;
            deny all;
       }
    }

}

指令介绍

# 为上游服务添加健康检查,以及相关配置
check
    syntax: *check interval=milliseconds [fall=count] [rise=count]
    [timeout=milliseconds] [default_down=true|false]
    [type=tcp|http|ssl_hello|mysql|ajp|fastcgi]*
    default: *none, if parameters omitted, default parameters are
    interval=30000 fall=5 rise=2 timeout=1000 default_down=true type=tcp*

# 设置检查上游服务的访问URI
check_http_send
    syntax: *check_http_send http_packet*
    default: *"GET / HTTP/1.0\r\n\r\n"*

# 展示服务的健康检查状态
check_status
    syntax: *check_status [html|csv|json]*
    

更多的参考github的内容。

启动Nginx服务

测试验证

curl http://hostname/server/ip

关掉8080端口服务,验证是否还能将请求打到8080上面。

动态更新后端服务插件

安装

首先安装 nginx 动态 upstream 配置模块ngx_http_dyups_module

cd ~
wget https://github.com/yzprofile/ngx_http_dyups_module/archive/v0.2.9.tar.gz \
-O ngx_http_dyups_module-0.2.9.tar.gz
tar -xvzf ngx_http_dyups_module-0.2.9.tar.gz

sudo rm -rf /usr/local/nginx
cd /usr/local/nginx-1.16.0
sudo ./configure \
	--prefix=/usr/local/nginx \
    --sbin-path=/usr/local/nginx/nginx \
    --conf-path=/usr/local/nginx/conf/nginx.conf \
    --error-log-path=/usr/local/nginx/logs/error.log \
    --pid-path=/usr/local/nginx/pid/nginx.pid \
    --with-http_ssl_module \
    --with-openssl=/home/wesley/openssl-OpenSSL_1_0_2k \
    --add-module=/home/wesley/echo-nginx-module-0.61 \
    --with-http_stub_status_module \
    --add-module=/home/wesley/ngx_cache_purge-2.3 \
    --add-module=/home/wesley/nginx_upstream_check_module-0.3.0 \
    --add-module=/home/wesley/ngx_http_dyups_module-0.2.9

sudo make
sudo make install

配置

修改nginx的配置文件

http {
	# 从upstream.conf文件读取初始upstream配置
	dyups_upstream_conf conf/upstream.conf;
	include conf/upstream.conf;
	# 默认主机
	server {
		listen 80;
		location / {
			proxy_pass http://$host;
		}
	}
	# 动态配置 upstream 的接口站点
	server {
		listen 81;
		location / {
			dyups_interface;	# 这个指令表示这边是接口站点
		}
	}
	# upstream 后面的 realserver,2 台 801,,82
	server {
		listen 801;
		location / {
			echo 801;
		}
	}
	server {
		listen 802;
		location / {
			echo 802;
		}
	}
}

upstream.conf 配置

upstream server80 {
	server 127.0.0.1:8080;
}
upstream server81 {
	server 127.0.0.1:8081;
}

指令介绍

语法: dyups_interface
默认: none
配置段: location
启用配置 upstream 的接口

语法: dyups_read_msg_timeout time
默认: 1s
配置段: main
设置从共享内存中读取 commands 的超时时间,默认为 1 秒

语法: dyups_shm_zone_size size
默认: 2MB
配置段: main
设置存储 commands 的共享内存

语法: dyups_upstream_conf path
默认: none
配置段: main
这个指令用来指定 upstream 配置文件的路径,他会在启动的时候加载

语法: dyups_trylock on | off
默认: off
配置段: main
是否启用锁,如果启用了它,同一时刻有人在修改,那么将会返回 409

测试验证

增删改查后端服务

# curl -d "server 127.0.0.1:801;server 127.0.0.1:802;" 127.0.0.1:81/upstream/ttlsa3
success
# curl -H "host: ttlsa3" 127.0.0.1
801
# curl -H "host: ttlsa3" 127.0.0.1
802

可以看到通过 host 的 ttlsa3 可以访问到 upstream 配置的两台服务器。如果你发现 curl 几次都是一样的,那么轻多试几次。

限流插件

Limit Upload Rate是淘宝开源的限流插件,针对客户端请求速率的限制。

安装

cd ~
wget https://github.com/cfsego/limit_upload_rate/archive/master.zip \
-O limit_upload_rate-master.zip
unzip limit_upload_rate-master.zip

sudo rm -rf /usr/local/nginx
cd /usr/local/nginx-1.16.0
# 只需要执行一次即可
sudo patch -p1 < /home/wesley/limit_upload_rate-master/for-nginx-1.4.4.patch
sudo ./configure \
	--prefix=/usr/local/nginx \
    --sbin-path=/usr/local/nginx/nginx \
    --conf-path=/usr/local/nginx/conf/nginx.conf \
    --error-log-path=/usr/local/nginx/logs/error.log \
    --pid-path=/usr/local/nginx/pid/nginx.pid \
    --with-http_ssl_module \
    --with-openssl=/home/wesley/openssl-OpenSSL_1_0_2k \
    --add-module=/home/wesley/echo-nginx-module-0.61 \
    --with-http_stub_status_module \
    --add-module=/home/wesley/ngx_cache_purge-2.3 \
    --add-module=/home/wesley/nginx_upstream_check_module-0.3.0 \
    --add-module=/home/wesley/ngx_http_dyups_module-0.2.9 \
	--add-module=/home/wesley/limit_upload_rate-master
	
sudo make
sudo make install

配置

# 由淘宝提供,需要limit_upload_rate的支持。
# 限制客户端上传速率,跟limit_rate用法类似
# 可以放在http, server, location, if in location指令块中
limit_upload_rate 5k;
limit_upload_rate_after 50k;

测验

通过上传页面检查

黑白名单插件

ngx_white_black_list 通过配置文件来指定黑白名单内容。

功能描述:
处在黑名单中的 ip 与网络,将无法访问 web 服务。
处在白名单中的 ip,访问 web 服务时,将不受 nginx 所有安全模块的限制。
支持动态黑名单(需要与 ngx_http_limit_req 配合),需要修改nginx代码这里就不提及了。如有需要,参考给到的ngx_white_black_list链接

安装

wget https://github.com/codehunte/ngx_white_black_list/archive/master.zip \
-O ngx_white_black_list-master.zip
unzip ngx_white_black_list-master.zip

sudo rm -rf /usr/local/nginx
cd /usr/local/nginx-1.16.0
sudo ./configure \
	--prefix=/usr/local/nginx \
    --sbin-path=/usr/local/nginx/nginx \
    --conf-path=/usr/local/nginx/conf/nginx.conf \
    --error-log-path=/usr/local/nginx/logs/error.log \
    --pid-path=/usr/local/nginx/pid/nginx.pid \
    --with-http_ssl_module \
    --with-openssl=/home/wesley/openssl-OpenSSL_1_0_2k \
    --add-module=/home/wesley/echo-nginx-module-0.61 \
    --with-http_stub_status_module \
    --add-module=/home/wesley/ngx_cache_purge-2.3 \
    --add-module=/home/wesley/nginx_upstream_check_module-0.3.0 \
    --add-module=/home/wesley/ngx_http_dyups_module-0.2.9 \
	--add-module=/home/wesley/limit_upload_rate-master \
	--add-module=/home/wesley/ngx_white_black_list-master

sudo make
sudo make install

配置

http {
	# 定义 黑名单或白名单文件 空间key
	# 只能在http指令块中
	# white_black_list_conf可以配置多个 只需 zone=value 其中的value不同就可
	white_black_list_conf conf/white.list zone=white:2m;
	white_black_list_conf conf/black.list zone=black:4m;

	# 启用黑白名单,on/off,启用/关闭。
	# 在http、server、location下使用, 功能默认是关闭
	# 配置在对应的指令块中,对应的指令块上下文生效
	white_list white on; #白名单  white 在整个http{}中都开启
	black_list black on; #黑名单  black 在整个http{}中都开启

	server {
		listen 80;
		root /data/www/;

		# 黑白名单配置调整接口,通过它可以调整配置内容
		location /sec_config {
			sec_config on;
		}
	}
}

white.list内容为192.168.120.83,black.list内容类似。

测验

查看黑白名单定义内容

访问http://xxx/sec_config

查看zone_name 为white 的 list_path中的具体内容

http://xxx/sec_config?zone_name=white

向 zone_name 为white 中增加192.168.141.23

http://xxx/sec_config?zone_name=white&add_item=192.168.141.23

在 zone_name 为white 中删除192.168.141.23

http://xxx/sec_config?zone_name=white&delete_item=192.168.141.23

 类似资料: