编辑1

编辑1

我按照 howtoforge 教程设置了一个 centos 服务器。它运行正常,但我注意到一些问题,不知道如何解决。

我打开 Google Chrome,打开我的网站,然后按住 F5(刷新页面),这会让浏览器向服务器发送很多请求。

我检查了日志文件,发现有数十、数百个相同的 url 请求来自我的 ip。它甚至不显示 .js .css 或图像文件之类的请求。只有我刷新的地址和几行一行接一行的内容,就像下面的一样。

这导致服务器完成所有操作后没有响应。

我尽量减少对 mysql 的 sql 查询,几乎所有数据都来自 APC 缓存。我启用并检查了 mysql 查询日志,它每页显示仅运行 2-3 个查询。其余来自 APC。

top 命令在此期间不会显示服务器的高负载,但会显示许多 apache 进程。

我该如何解决这个问题?有没有办法限制/阻止每个 IP 不请求这么多相同的 URL。

192.168.162.191 - - [06/Sep/2013:12:26:29 +0300] "GET /en/page1 HTTP/1.1" 200 10084 "http://domain.com/en/page1" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36"

编辑1

我按住 F5 5 秒,然后就发生了这种情况。服务器负载通常为零。服务器上没有人。

页面生成时间为 200ms

顶部输出

top - 08:23:00 up 41 days, 11:32,  1 user,  load average: 0.12, 0.05, 0.01
Tasks: 490 total,   2 running, 488 sleeping,   0 stopped,   0 zombie
Cpu(s): 27.9%us,  5.6%sy,  0.0%ni, 66.5%id,  0.0%wa,  0.1%hi,  0.0%si,  0.0%st
Mem:   2979104k total,  2141960k used,   837144k free,   178948k buffers
Swap:  3112952k total,    14112k used,  3098840k free,   775020k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
18293 web1      20   0  146m  27m  16m R 83.9  1.0   0:02.96 php-cgi
25247 mysql     20   0  213m  57m 4996 S 22.9  2.0   3:34.66 mysqld
18465 web1      20   0  143m  22m  13m S  9.3  0.8   0:00.28 php-cgi
18467 web1      20   0  143m  22m  13m S  9.3  0.8   0:00.28 php-cgi
18431 web1      20   0  143m  22m  13m S  4.6  0.8   0:00.14 php-cgi
31704 apache    20   0 25204 3648  708 S  1.3  0.1   0:01.10 httpd
31701 root      20   0  151m  20m  11m S  1.0  0.7   0:02.34 httpd
18295 root      20   0  2836 1304  864 R  0.7  0.0   0:00.13 top
    9 root      20   0     0    0    0 S  0.3  0.0   0:12.50 ksoftirqd/1
 1378 root       0 -20     0    0    0 S  0.3  0.0   5:12.68 iscsi_q_30
18200 apache    20   0  151m  13m 4668 S  0.3  0.5   0:00.01 httpd
18330 apache    20   0  151m  13m 4676 S  0.3  0.5   0:00.01 httpd
    1 root      20   0  2900 1316 1164 S  0.0  0.0   0:05.91 init
    2 root      20   0     0    0    0 S  0.0  0.0   0:00.03 kthreadd
    3 root      RT   0     0    0    0 S  0.0  0.0   0:26.73 migration/0
    4 root      20   0     0    0    0 S  0.0  0.0   5:01.34 ksoftirqd/0
    5 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 migration/0

输出为ps uax | grep httpd | wc -l238 。空闲时约为 20。

答案1

请提供以下信息:

页面生成时间

输出:

top

ps uax | grep httpd | wc -l 

(如果你使用 Debian,也许你需要用 apache 替换 httpd)在出现问题的时候

答案2

如果您的设置未调整,则只需按 F5 即可对 apache + php/mysql 进行 ddos​​ 攻击。

  • 使用 mysqltuner 或 mysql tuning primer 等 mysql-tuning-script 检查 mysql 并进行相应调整

  • 检查 apache 错误日志

  • 使用 mod_evasive 防止你的服务器被意外攻击

  • 使用 top/htop (针对 os)、atop (针对 apache) 和 mytop (针对 mysql) 来调查瓶颈

  • 调整 -> 检查 -> 调整 -> 检查 -> 调整 -> 检查 -> 快乐:)

相关内容