当前位置: 代码网 > 服务器>服务器>Linux > Nginx中配置IP白名单动态刷新的流程步骤

Nginx中配置IP白名单动态刷新的流程步骤

2026年08月15日 Linux 我要评论
一:背景域名访问,动态配置ip白名单,将不可信的ip拒绝访问二:流程1、配置脚本 #!/bin/bash# 配置db_user="xxx"db_pass="xxx!@#"db_host="xxx"db

一:背景

域名访问,动态配置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 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

0 * * * * /etc/nginx/white_ip/update_white_ip.sh >> /etc/nginx/white_ip/task_update_white_ip.log 2>&1

到此这篇关于nginx中配置ip白名单动态刷新的流程步骤的文章就介绍到这了,更多相关nginx配置ip白名单动态刷新内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com