主动检查内部上游的服健康状态插件,淘宝开源实现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