我如何控制我网站的所有请求?
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 将创建哪些日志。
我需要管理我网站的请求。由于两者,我需要检测可疑请求并阻止该 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 将创建哪些日志。