我需要管理网站的请求。因为我需要检测可疑请求并阻止该IP并计算访问我网站的用户数量。
所以我创建了一个这样的表:
// requests
+----+----------------+-------------+
| id | UserId_or_IP | unix_time |
+----+----------------+-------------+
| 1 | 12353 | 1339412843 |
| 2 | 23353 | 1339412864 |
| 3 | 178.253.29.175 | 1339412894 |
| 4 | 3422 | 1339412899 |
| 5 | 342232 | 1339412906 |
| 6 | 2353 | 1339412906 |
| 7 | 7785 | 1339412951 |
| 8 | 148.23.29.109 | 1339413640 |
| 9 | 178.253.29.175 | 1339413621 |
| 10 | 5462 | 1339414490 |
| 11 | 342232 | 1339414923 |
| 12 | 178.253.29.175 | 1339419901 |
| 13 | 8007 | 1339424860 |
| 14 | 8007 | 1339424822 |
| 15 | 2353 | 1339424902 |
+----+----------------+-------------+
我为每个请求插入一个新行(打开我网站的每一页意味着一个请求)。
以下是index.php
中的查询:( index.php
是一个页面,所有页面都从中传递)
INSERT INTO requests (id, UserId_or_IP, unix_time)
VALUES (NULL, :id_or_ip, UNIX_TIME());
我的问题是什么?该查询使我的网页加载速度变慢。因为在加载每个页面之前都有INSERT
个查询。有没有更好的方法来处理网站的请求?
答案 0 :(得分:1)
请考虑使用您的Web服务器已生成的日志。例如,在名为80.82.70.24 - - [19/Jun/2016:07:26:44 -0400] "GET http://httpheader.net/ HTTP/1.1" 401 481 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.28) Gecko/20120306 Firefox/3.6.28 (.NET CLR 3.5.30729)"
的文件中,Web服务器Apache编写如下所示的行:
foreach
服务器的配置将决定此日志文件中的结构。我的默认Apache安装中的此示例包括请求的IP,发生的时间,实际请求,服务器发回的代码(在本例中为401-未找到)以及发出请求的浏览器。互联网上有很多使用Perl等程序解析Web服务器日志文件并生成统计信息的例子。
您评论说您正在使用Nginx,因此您必须了解Nginx将创建的日志。