首页 > 心得分享,程序资源 > 使用阿里云服务器时被DDOS到黑洞时的一种解决方案

使用阿里云服务器时被DDOS到黑洞时的一种解决方案

使用阿里云ECS服务器容易被DDOS进黑洞而又没钱购买DDOS高防IP时。
并不是没有其他的解决办法,因为有很多ISP提供价格较为低廉的高防服务器。
每个月也才几千块钱,相较阿里云动辄几万每月的高防服务,确实便宜了很多。
本文根据自己的需要,说明了一下如何使用第三方高防服务器为自己清洗流量。

首先,看一下目前使用的流程逻辑。

防火墙逻辑

平时用户端直接访问阿里云的应用服务器。
被攻击时,将域名解析到高防IP上,通过Nginx反向代理回源到阿里云服务器上。
由于阿里云服务器被DDOS时会进黑洞,所以加了一个用来将外网请求映射到内网的代理服务器。
为了提高被攻击时的网站打开速度,高防服务器上会使用静态文件缓存。
减少向后端应用服务器请求的次数。

首先高防服务器上Nginx配置如下

http
    {
        # 设置缓存目录
        proxy_temp_path   /home/proxy_cache_dir 1 2;
        # 静态文件目录 1天
        proxy_cache_path  /home/proxy_temp_dir/cache_img  levels=1:2 keys_zone=cache_img:1024m inactive=1d max_size=100g;
        # html文件目录 10分钟有效
        proxy_cache_path  /home/proxy_temp_dir/cache_html  levels=1:2 keys_zone=cache_html:1024m inactive=10m max_size=100g;
        # 设置服务器地址
        upstream server_huanan {
            server 120.76.0.0:80;
        }
    server
        {
            listen 80;
            server_name www.qs5.org;
            # 添加缓存命中头信息
            add_header X-Cache $upstream_cache_status;
            # 清除缓存
            location ~ /purge_img(/.*) {
                proxy_cache_purge  cache_img $host$1$is_args$args;
            }
            location ~ /purge_html(/.*) {
                proxy_cache_purge  cache_html $host$1$is_args$args;
            }
            # html文件缓存 缓存10分钟
            location ~ .(html|htm)$ {
                proxy_pass http://server_huanan;
                proxy_set_header Host $host;
                #设置资源缓存的zone
                proxy_cache cache_html;
                #设置缓存的key
                proxy_cache_key $host$uri$is_args$args;
                #设置状态码为200和304的响应可以进行缓存,并且缓存时间为10分钟
                proxy_cache_valid 200 304 10m;
                expires 10m;
            }
            # 图片文件缓存
            location ~ .(jpg|png|gif|css|js)$ {
                proxy_pass http://server_huanan;
                proxy_set_header Host $host;
                #设置资源缓存的zone
                proxy_cache cache_img;
                #设置缓存的key
                proxy_cache_key $host$uri$is_args$args;
                #设置状态码为200和304的响应可以进行缓存,并且缓存时间为1天
                proxy_cache_valid 200 304 1d;
                expires 1d;
            }
            # 其他文件反向代理回源
            location / {
                proxy_pass http://server_huanan;
                proxy_set_header Host $host;
            }
            access_log  /home/wwwlogs/qs5_www_org.log;
        }
    }

具体每个参数的意义,该写注释的我都写了,自己酌情百度意义并进行修改。
注意,请不要照抄我的代码,好多地方是你需要额外处理的。

中间代理服务器的Nginx配置
这个就比较简单了,直接反向数据回去就好。

server
    {
        listen 80;
        server_name www.qs5.org;
        # 直接反向数据回应用服务器的内网IP上
        location / {
            proxy_pass http://192.168.1.16:80;
            proxy_set_header Host $host;
        }
        access_log  /home/wwwlogs/qs5_www_org.log;
    }

同时,需要注意的是,阿里云内网一定要互通。
安全组或者路由一定要允许代理服务器通过内网访问应用服务器的80端口。
而服务器被攻击时,最好使用安全组禁止应用服务器的外网访问。

当然,其实更好的解决方案应该是:
应用服务器始终在内网使用。
一直使用边缘服务器提供对外服务。
高防服务器直接反向到应用服务器上。
这样就避免了黑洞时还要使用一个代理服务器做跳板的问题了。
高防服务逻辑

边缘服务器和高防服务器的Nginx配置一致。

上一篇: 【总结&计划】依旧平凡但没那么平淡的贰零一陆,应该更有想象力的2017。

下一篇: 使用Putty的端口映射功能通过跳板机连接到内网FTP服务器上

最近回复