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相关的中间件

相关推荐
AOwhisky36 分钟前
Kubernetes 学习笔记:集群管理、命名空间与 Pod 基础
linux·运维·笔记·学习·云原生·kubernetes
小龙在慢慢变强..1 小时前
目录结构(FHS 标准)
linux·运维·服务器
刘延林.1 小时前
win11系统下通过 WSL2 安装Ubuntu 24.04 使用RTX 5080 GPU
linux·运维·ubuntu
星恒讯工业路由器2 小时前
星恒讯工业生产自动化解决方案
运维·物联网·自动化·智能路由器·信息与通信
a8a3022 小时前
Laravel9.x新特性全解析
运维·spring boot·nginx
beyond阿亮2 小时前
IEC104 Client Simulator - IEC104 主站/客户端模拟器 仿真器免费使用教程
运维·服务器·网络
(Charon)2 小时前
【C++/Qt】Qt 封装 TCP 客户端底层 Network 类:连接、收发、自动测试与错误处理
服务器·网络·qt·tcp/ip
Agent产品评测局3 小时前
生产排期与MES/ERP系统打通,实操方法详解:2026企业级智能体与超自动化集成实战指南
运维·人工智能·ai·chatgpt·自动化
CodeOfCC3 小时前
Linux 嵌入式arm64安装openclaw
linux·运维·服务器