如果网站受到攻击,先收集一波访问的ip
/**
* 【可选】记录IP到指定文件(去重版,同一IP只存一次)
* @param string $targetFile 要写入的文件路径
* @return bool
*/
function writeIpToFileUnique($targetFile) {
// 获取IP
$ip = '未知IP';
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ip = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR'])[0];
} elseif (!empty($_SERVER['REMOTE_ADDR'])) {
$ip = $_SERVER['REMOTE_ADDR'];
}
$ip = trim($ip === '::1' ? '127.0.0.1' : $ip);
// 检查IP是否已存在
if (file_exists($targetFile)) {
$existingIps = file($targetFile, FILE_IGNORE_NEW_LINES);
if (in_array($ip, $existingIps)) {
return true; // 已存在,无需写入
}
}
// 写入文件
try {
$fileDir = dirname($targetFile);
if (!is_dir($fileDir)) {
mkdir($fileDir, 0755, true);
}
file_put_contents($targetFile, $ip . PHP_EOL, FILE_APPEND | LOCK_EX);
return true;
} catch (Exception $e) {
//error_log("[IP写入失败(去重版)] 文件:{$targetFile},错误:{$e->getMessage()}");
return false;
}
}
记录好IP后,在nginx配置文件 加入
http
{
# ...... 省略原有配置 ......
server_tokens off;
# ========== 新增:引入IP黑名单文件 ==========
include /www/server/nginx/conf/ip_blacklist.conf;
allow all;
# =============================================
access_log off;
# ...... 后续server块不变 ......
}
这个ip_blacklist.conf文件的格式为:
deny 192.168.1.100;
deny 203.0.113.88;
deny 10.0.0.0/8;
deny 172.16.0.0/12;
文件里面的ip 就会收获403
