一:背景
域名访问,动态配置ip白名单,将不可信的ip拒绝访问
二:流程
1、配置脚本
#!/bin/bash
# 配置
db_user="xxx"
db_pass="xxx!@#"
db_host="xxx"
db_port="3306"
db_name="mall"
db_table="xxx"
ip_column="ip"
# 生成文件路径
db_white_ip_txt="/etc/nginx/white_ip/tmp/ip_list.txt"
nginx_white_ip_conf="/etc/nginx/white_ip/white_ip.conf"
# 临时文件
tmp_file="/etc/nginx/white_ip/tmp/white_ip_tmp.conf"
# 查询数据库,获取ip列表,生成allow规则
mysql -u${db_user} -p${db_pass} -h${db_host} -p${db_port} -n -e "select ${ip_column} from ${db_name}.${db_table} where ${ip_column} != '127.0.0.1';" > ${db_white_ip_txt}
if [ $? -ne 0 ]; then
echo "$(date '+%f %t') error: 数据库查询失败" >&2
exit 1
fi
# 清空临时文件
> $tmp_file
# 生成allow规则,过滤掉空行或不合法ip可以用简单正则校验
while read ip; do
# 简单 ip 格式校验(ipv4)
if [[ $ip =~ ^([0-9]{1,3}\.){3}[0-9]{1,3}$ ]]; then
echo "allow $ip;" >> $tmp_file
else
echo "$(date '+%f %t') warning: ip格式不正确,忽略 $ip" >&2
fi
done < ${db_white_ip_txt}
# 添加最后一行拒绝所有
echo "deny all;" >> $tmp_file
# 测试nginx配置语法(include新白名单文件)
sudo nginx -t
if [ $? -ne 0 ]; then
echo "$(date '+%f %t') error: nginx配置语法错误,放弃更新" >&2
exit 2
fi
# 替换白名单配置文件
mv $tmp_file $nginx_white_ip_conf
if [ $? -ne 0 ]; then
echo "$(date '+%f %t') error: 替换白名单配置文件失败" >&2
exit 3
fi
# 重载nginx配置
systemctl reload nginx
if [ $? -eq 0 ]; then
echo "$(date '+%f %t') info: nginx重载成功,白名单更新完成"
else
echo "$(date '+%f %t') error: nginx重载失败" >&2
exit 4
fi
exit 02、white_ip.conf
allow 112.345.5.34; 。。。。 deny all;
3、xxl_ssl.conf
server {
listen 80;
server_name gogs.xxx.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name gogs.xxx.com;
#禁止访问敏感文件
location ~ /\. {
deny all;
access_log off;
log_not_found off;
}
location /{
include /etc/nginx/white_ip/white_ip.conf;
deny all;
proxy_pass http://localhost:3000/;
proxy_set_header host $host;
proxy_set_header x-real-ip $remote_addr;
proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;
proxy_set_header x-forwarded-proto $scheme;
}
ssl_certificate /etc/nginx/keys/xxx.com.pem;
ssl_certificate_key /etc/nginx/keys/xxx.com.key;
ssl_session_timeout 5m;
ssl_ciphers ecdhe-rsa-aes128-gcm-sha256:ecdhe:ecdh:aes:high:!null:!anull:!md5:!adh:!rc4;
ssl_protocols tlsv1 tlsv1.1 tlsv1.2;
ssl_prefer_server_ciphers on;
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}4、创建基本临时文件
创建tmp文件下: ip_list.txt white_ip_tmp.conf
5、设置crontab
0 * * * * /etc/nginx/white_ip/update_white_ip.sh >> /etc/nginx/white_ip/task_update_white_ip.log 2>&1
到此这篇关于nginx中配置ip白名单动态刷新的流程步骤的文章就介绍到这了,更多相关nginx配置ip白名单动态刷新内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论