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

How can I control all my website's requests?

我需要管理我网站的请求。由于两者,我需要检测可疑请求并阻止该 IP 并计算访问我网站的用户数量。

所以我创建了一个 table 这样的:

// 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  |
+----+----------------+-------------+

然后我在 table 中为每个请求插入一个新行 (打开我网站的每一页都意味着一个请求)

这是我在 index.php 中的查询:(index.php 是所有页面都从中传递的页面)

INSERT INTO requests (id, UserId_or_IP, unix_time)
            VALUES   (NULL, :id_or_ip, UNIX_TIME());

我的问题是什么? 该查询使我的网页加载缓慢。因为在加载每个页面之前都有一个 INSERT 查询。有没有更好的方法来处理网站的请求?

请考虑使用您的网络服务器已经生成的日志。例如,在名为 access_log 的文件中,Web 服务器 Apache 写入如下所示的行:

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)"

您服务器的配置将决定此日志文件的结构。这个来自我的默认 Apache 安装的示例包括请求的 IP、它发生的时间、实际请求、服务器发回的代码(在本例中为 401-not found)以及发出请求的浏览器。互联网上有很多使用 Perl 等程序解析 Web 服务器日志文件并生成统计信息的示例。

您评论说您正在使用 Nginx,因此您必须了解 Nginx 将创建哪些日志。