【发布时间】:2019-01-04 16:33:02
【问题描述】:
我刚刚从我的电脑上执行了一个基本的 DDOS:
websocket-bench -a 2500 -c 200 wss://s.example.com
这让我的服务器崩溃了! WS 通过连接到我的 nginx 代理来工作:
location / {
proxy_pass http://sock;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Real-IP $remote_addr;
proxy_read_timeout 60;
}
upstream sock {
server 127.0.0.1:1203 fail_timeout=1s;
}
并且在服务器上的本地端口1203 上是ratchet。棘轮的设置是我允许任何连接,第一个onMessage 执行身份验证,如果无效则关闭连接。
我还尝试通过在第一个连接上传递标头进行身份验证,如果无效,套接字将关闭,但这根本没有帮助,nginx 仍然达到 100% 资源然后崩溃。
我应该分析什么来防止这些崩溃?
将上游更改为另一个关闭的端口(即禁用它)时,服务器仍然崩溃。
【问题讨论】:
-
您无法通过“调整”某些配置变量或安装阻止 DDOS 的程序来阻止 DDOS。您的问题不在于 ddos,而在于一旦崩溃 - 服务就无法恢复。这就是我们使用
supervisord的原因。此外,使用 nodejs 代替棘轮会产生显着的收益。 -
是的,但我的问题是 DDOS 是在不应该出现的时候引起的。我的网络以 6mb/s 的速度上传应该不能让千兆服务器崩溃——这意味着我的配置有问题。
-
如果现在有 10,000 人访问我的 http web 服务器,它只会减慢服务器速度而不是崩溃。
-
10k 对于 nginx 和 node 不会有问题。您可以使用 Cloudflare 之类的服务来阻止它。如果您需要 10k 人连接,则使用多个 nginx 实例(您的 DNS 指向处理您的域的多个 IP 地址)并且每个 nginx 负载平衡到处理 Web 套接字的多个棘轮/nodejs 实例。这就是缩放的方式。
标签: php nginx ratchet socketrocket