Nginx中配置IP白名单动态刷新

Nginx中配置IP白名单动态刷新

文章目录

一:背景

域名访问,动态配置IP白名单,将不可信的IP拒绝访问

二:流程

1、配置脚本

bash 复制代码
 #!/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 0

2、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

bash 复制代码
0 * * * * /etc/nginx/white_ip/update_white_ip.sh >> /etc/nginx/white_ip/task_update_white_ip.log 2>&1

三:Nginx基础配置

Nginx解决504的问题

Nginx中将Http升级为Https

Nginx基础配置及限流信息

Linux中部署Java相关的中间件

相关推荐
虎头金猫4 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
还是大剑师兰特4 天前
解决nginx错误:http://localhost:7000正常,http://localhost:7000/map 报错404
nginx·大剑师
AI职业加油站4 天前
AI智能体应用工程师证书:政策红利下的职业新风口
大数据·运维·人工智能·学习·职场发展
此冬歌咏4 天前
K8s 节点故障实战:优雅驱逐 31 秒,硬故障 331 秒,以及那个永远 Pending 的 Pod
运维·k8s
xing-xing4 天前
Docker容器中Nginx站点根目录网页配置访问
nginx·docker
-梅4 天前
linux(8) 软硬链接
linux·运维·服务器
张洛闻Eren4 天前
k8s云原生【第十课】:水平 Pod 自动扩缩容
运维·数据库·云原生·kubernetes·github
其实防守也摸鱼4 天前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
布裘4 天前
【银河麒麟】V4桌面图标消失,右击鼠标没反应排查
运维·银河麒麟·桌面环境
懂软件的胡子个哥4 天前
微信机器人为什么需要“回复候选”而不是所有 AI 内容直接发送
运维·微信·自动化·wechatapi·个人微信号二次开发