如何控制我网站的所有请求?

时间:2016-06-20 19:03:02

标签: php mysql sql algorithm performance

我需要管理网站的请求。因为我需要检测可疑请求并阻止该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个查询。有没有更好的方法来处理网站的请求?

1 个答案:

答案 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将创建的日志。