网站搭建 | 网站架构
准备
经过了前面一系列的购买域名、购买服务器、ICP备案以及申请SSL证书流程,已经完成搭建一个个人网站的最基本准备。
接下来就可以部署自己的页面让DNS解析到自己的服务器上了。

架构
平时在自己本地开发前后端需要运行测试时通常会将服务发布在8080端口,然后通过http://localhost:8080进行本地访问。现在在前面准备了许多工作是为了让我们的服务能够直接通过域名来访问,不需要记忆复杂的“IP+端口”地址。
把服务发布在80和443端口就能通过http和https协议的域名地址来访问,但随着个人网站的发展,提供的服务可能会变得多样化,可是80(HTTP)和443(HTTPS)端口只有一个,这就需要一种解决方案来同时在一个端口支持多个服务。这种普遍的需求催生了多种端口转发、反向代理技术。除了使用Nginx作为反向代理服务器来实现这一功能外,还有许多其他技术可以满足这一需求,例如,Microsoft IIS、OpenResty、Tengine。
可以使用Nginx来分开不同的域名或子域名或请求路径,把对应的流量引入本地静态Web目录或者反向代理到不同本地端口、其他服务器地址。
目前我的业务一开始有3个,分别是主站的个人页,博客、1Panel服务器管理面板。


用Nginx部署的架构图如下:

网络安全
任何时候都应该尽量避免泄露源站真实IP
DDoS攻击,全称为分布式拒绝服务攻击(Distributed Denial of Service attack),主要通过恶意流量消耗网络或网络设备的资源,从而导致网站无法正常运行或在线服务无法正常提供。
CC攻击,全称为挑战黑洞( Challenge Collapsar),因为以前的抵抗DDoS攻击的安全设备叫黑洞,顾名思义挑战黑洞就是说黑洞拿这种攻击没办法。CC攻击的原理是通过代理服务器或者大量肉鸡模拟多个用户访问目标网站的动态页面,制造大量的后台数据库查询动作,消耗目标CPU资源,造成拒绝服务。
常见的DDoS攻击类型
| DDoS攻击类型 | 具体的攻击类型 | 危害及防护思路 |
|---|---|---|
| 应用层攻击 | CC攻击 HTTP Get Flood攻击 HTTP Post Flood攻击 | 模拟正常的用户请求,通过向目标服务器或系统发送大量正常的HTTP请求,使Web应用程序耗尽处理能力,直接影响Web应用的功能和性能,例如Web响应、访问数据库、磁盘读写等。应用层攻击与正常的业务请求没有明显的区分,所以比较难以辨认。因此需关注Web服务中一些资源消耗较大的任务,比如Web应用中的分页和分表、文件的上传和下载、大文件或多个文件同时传输、后台定时任务、资源密集型API调用、实时图形渲染或复杂的数据可视化等。可以考虑对请求的频率进行限制,防止过多请求达到应用程序,或对应用程序的资源进行管控,避免单一用户或IP地址消耗过多资源。 |
| 网络层或协议攻击 | SYN Flood攻击 ACK Flood攻击 Smurf DDoS攻击 | 利用协议通信的恶意连接请求或伪造连接请求来耗尽网络资源。TCP通信过程通过三次握手建立连接,其中包括发送SYN包和ACK包。攻击者会发送大量SYN包用于建立TCP的初始连接,但不完成后续的握手过程(即不响应服务器发回的SYN-ACK包),导致服务器为了维护这个半连接状态持续分配资源,最终资源耗尽,达到拒绝服务的状态。因此需要配置防火墙规则、黑白名单功能来识别和阻止异常或恶意的网络流量。 |
| 容量耗尽型攻击 | DNS Flood攻击 UDP Flood攻击 ICMP Flood攻击 | 通过向攻击目标发送大量的数据包,消耗目标系统的可用带宽来造成网络拥塞。DNS Flood攻击还可以利用伪造的IP地址向开放式DNS服务器发出海量的域名查询请求(虚假请求),让DNS服务器无法响应正常的域名查询请求。因此可以考虑增加足够的带宽来确保受到攻击时服务可用,或使用CDN来分散流量,可在一定程度上缓解攻击流量带来的影响。 |
表格内容来自阿里云
如何防御
对于大量消耗网络资源的DDoS攻击,只能硬防,费钱费力,常见防御方式有
- 购买CDN 服务(cloudflare免费但慢),提高带宽吞吐能力,分担源站压力,避免网络拥塞。这种抵御方式不能泄露服务器源IP,不然攻击能绕过CDN直接攻击源站服务器。
- 购买高防服务器。检测、清洗、过滤攻击流量,让正常请求流向源站。
对于大量消耗服务器CPU、IO资源的CC攻击,使用WAF(Web应用防护系统,Web Application Firewall)做好请求的频率监控与限制,使用黑名单功能,避免单一用户或IP地址消耗过多资源。
不推荐按量计费的服务(CDN、服务器、OSS),被恶意刷流量产生的费用难以承受。
源站服务器的简单安全防护措施有:
禁用22端口、指定远程IP连接、服务器可疑IP登录通知
只放行443端口、配置SSL证书
在云平台配置服务器监控的报警规则,及时发现问题

新架构
单台服务器添加防御措施后的架构:

如果有多台服务器可以使用负载均衡根据每台服务器负载情况调度流量,避免单台服务器压力过大。

个人网站
高防服务器费用对于普通个人网站来说难以支撑,可以选择自己在一台专门的服务器上部署一些免费的WAF,比如雷池WAF、堡塔云WAF。有多预算的情况下不建议源站服务器上运行WAF,不然单机的负载更高、设备宕机的概率更大。
免费的WAF防火墙都具有一定的防护功能,例如:
- 防CC攻击、自定义拦截规则、限制访问
- 防恶意采集、防刷接口
- 防SQL 注入、XSS、代码注入


在单独的服务器部署WAF(推荐):

在源站服务器上部署WAF(不推荐):

本站实际情况
购买CDN的费用看着也不算高,一般也能承受。


以我乐于薅羊毛白嫖的精神,对目前使用的这一个月不到4块的2H2G服务器,中间增加任何成本都是不能接受的。
- CDN :Cloudflare直接使用的话速度和连通性感人,要配置好的话比较麻烦,我是不愿意用的。又拍云联盟提供有了一些免费CDN流量额度,先尝试尝试效果如何,不然就直接让服务器裸奔了😇。
- 源站服务器上部署WAF:就这2G内存小身板跑完WAF都没多少资源剩下了😇。
所以最终网站的部署架构如图:
