腾讯云EdgeOne个人版基于nginx实现限制ip,保护源站
首先个人版和基础版本都是没有实现源站点防护的,需要自己想办法实现,于是可以基于文档提供的IP地址,定期执行脚本更新
docker版本前提:
1:若是docker版本,需要将edgeone_ips.conf文件挂载到docker中,并且确保nginx可以正确访问到edgeone_ips.conf文件
1、新建update_edgeone_ips.sh脚本
#!/bin/bash
# EdgeOne IP列表API,根据文档自行更改
API_URL="https://api.edgeone.ai/ips?version=v4&area=global"
# Nginx配置文件路径 根据自己的路径修改
NGINX_CONF_DIR="nginx_conf"
IP_CONF_FILE="edgeone_ips.conf"
# 获取最新的EdgeOne IP列表
echo "Fetching latest EdgeOne IPs..."
curl -s $API_URL > /tmp/edgeone_ips.txt
# 检查是否成功获取到IP列表
if [ $? -ne 0 ] || [ ! -s /tmp/edgeone_ips.txt ]; then
echo "Failed to fetch IP list."
exit 1
fi
# 更新Nginx IP访问控制文件
echo "Updating Nginx IP configuration file..."
echo "# EdgeOne IP Access Control" > $IP_CONF_FILE
while read -r ip; do
echo "allow $ip;" >> $IP_CONF_FILE
done < /tmp/edgeone_ips.txt
echo "deny all;" >> $IP_CONF_FILE
# 重载Nginx配置,使用Docker命令 根据自己需求修改容器名,若没有使用docker稍作修改简化便可。
echo "Reloading Nginx configuration in Docker container..."
docker exec nginx nginx -s reload
echo "Update completed."
2、设置定时任务
将定时任务设置为每天凌晨 3 点执行。使用 crontab
命令编辑任务:
sudo crontab -e
在末尾添加
0 3 * * * /bin/bash /文件路径/update_edgeone_ips.sh >> /日志路径/update_edgeone_ips.log 2>&1
这将确保脚本每天凌晨 3 点执行,并将日志写入 /var/log/update_edgeone_ips.log
文件。
3、调整 Nginx 配置
在你的 Nginx 配置文件中引用 edgeone_ips.conf
文件。在主配置文件添加一行 include
:
# 引用EdgeOne IP访问控制文件
include /文件路径/edgeone_ips.conf;
4、赋予脚本执行的权限
chmod +x /文件路径/update_edgeone_ips.sh
这样,就可以实现自动更新 EdgeOne 的 IP 列表到 Nginx 配置,并通过定时任务自动更新,从而提高源站的安全性。
结尾
执行/bin/bash /文件路径/update_edgeone_ips.sh,测试脚本是否成功。
观察输出内容,确认以下几点:
IP列表是否成功获取:脚本应显示“Fetching latest EdgeOne IPs...”,并成功写入 IP 配置文件
/文件路径/edgeone_ips.conf
。Nginx配置文件是否更新:在
/文件路径/edgeone_ips.conf
中查看是否已正确写入allow
IP 列表和deny all;
规则。Nginx是否重载成功:脚本运行时应显示“Reloading Nginx configuration in Docker container...”且无报错。注:若无docker可以不用理会,主要是查看是否重载成功
并且排查问题也可以查看日志:cat /日志文件路径/update_edgeone_ips.log