站点访问速度及安全一直以来都是站长们建站所关注的重要内容。为了满足站点能够被全球用户的访问需求,通常我们会采用云服务商提供的 CDN 来加速访问速度。比如国外比较知名的 AWS 提供的
Cloudfront
、GCP 提供的
Cloud CDN
以及 Cloudflare 公司提供的
Cloudflare
等,国内比较知名的腾讯云提供的
CDN
、阿里云提供的
CDN
、又拍云提供的
CDN
以及七牛云提供的
CDN
等。(PS:其实国内的其他云服务商比如华为云、百度云、滴滴云、京东云等等都提供了 CDN 解决方案。)
CDN 除了常规的多地、多节点缓存加速之外,还可以清洗流量,从而预防和对抗 DDoS 攻击。如果我们购买的服务器不是固定带宽、流量无限,而是大带宽、流量按量付费的话,遇到 DDoS 就会受到很大损失。DDoS 攻击不仅会让服务器上的服务无法正常响应请求,从而造成 Nginx 或 Apache 服务过饱和,甚至服务器宕机,还会产生很大的无效入站流量消耗。一般来说,流量按量计费是对入站流量进行计费。这样一来,光流量这一项的经济损失就可能会是非常庞大的数字。
当我们给 Nginx 站点套上一层 Cloudflare 或者其他 CDN 服务之后,用户访问服务时会先经过 Cloudflare。Cloudflare 免费版就具有清洗流量的功能:当 Cloudflare 发现流量来自僵尸网络或者异常流量请求时,就会拒绝响应或者只响应某些请求,而这些请求也会转给真实的服务器进行响应。从这里也可以看出来,用上 Cloudflare 之后,用户根本不知道真实服务器的 IP 地址或其他信息,能进一步保障服务器的安全。
这里,为了在实际的应用场景中来实践,特地选取了适合个人搭建的个人短地址服务
Yourls
。
Yourls
Yourls (
Y
our
O
wn
URL
S
hortener) 是一款基于 PHP 的允许你运行自己的短地址服务的免费和开源的软件。你可以完全控制你的数据、详细的统计和分析、插件以及更多。以下是源代码和官方推荐插件的仓库:
YOURLS/YOURLS
YOURLS/awesome-yourls
为了更加快速地部署 Yourls 服务,这里选用 docker-compose 的方式进行部署。以下是配置文件内容:
# docker-compose.yml
version: '3.1'
services:
yourls:
image: yourls
restart: always
ports:
- 8080:80
environment:
YOURLS_DB_PASS: abcdefgh
YOURLS_SITE: https://url.com
YOURLS_USER: admin
YOURLS_PASS: admin@2022
mysql:
image: mysql:5.7
restart: always
volumes:
- ./db:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: abcdefgh
MYSQL_DATABASE: yourls
Yourls 的官方 Docker 镜像提供了多种服务方式和体系架构,如下图所示。如果使用的服务器体系架构不同,对应的 mysql 镜像也应做出更改。比如,如果服务器是 IBM 的 s390x 架构,就可以选 ibmcom/mysql-s390x:5.7.34。
编辑完配置文件后执行以下命令启动 Yourls 服务:
docker-compose up -d
Cloudflare 配置
访问 Cloudflare 控制台,选择进入已添加的域名操作面板。
添加域名记录
进入 DNS 面板,点击添加记录按钮。
采用 A 记录或 CNAME 记录类型,这里的代理状态一定要像现在这样打开,否则 Cloudflare 将不会被启用。
在 Nginx 配置目录 /etc/nginx/sites-available 下新增 yourls 配置文件(需使用 sudo 权限方可新增),配置文件内容如下所示:
# /etc/nginx/sites-available/yourls
server {
listen 443 ssl http2;
ssl_certificate /home/linux1/ssl/url.com.pem;
ssl_certificate_key /home/linux1/ssl/url.com.key;
server_name url.com;
index index.php index.html index.htm;
access_log /var/log/nginx/yourls.access.log;
error_log /var/log/nginx/yourls.error.log;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $proxy_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
(可选)只允许 Cloudflare 访问
为了进一步确保真实服务器只响应来自 Cloudflare 转发的请求,我们可以在 Nginx 的配置文件中增加对于允许访问 IP 地址的限制。如下配置文件中的 IPv4/IPv6 的 IP 地址段均来自 Cloudflare 官方声明。此 cf.conf 文件放置在 /etc/nginx 目录下。
# cf.conf
# https://www.cloudflare.com/ips
# IPv4
allow 103.21.244.0/22;
allow 103.22.200.0/22;
allow 103.31.4.0/22;
allow 104.16.0.0/12;
allow 108.162.192.0/18;
allow 131.0.72.0/22;
allow 141.101.64.0/18;
allow 162.158.0.0/15;
allow 172.64.0.0/13;
allow 173.245.48.0/20;
allow 188.114.96.0/20;
allow 190.93.240.0/20;
allow 197.234.240.0/22;
allow 198.41.128.0/17;
# IPv6
allow 2400:cb00::/32;
allow 2606:4700::/32;
allow 2803:f800::/32;
allow 2405:b500::/32;
allow 2405:8100::/32;
allow 2a06:98c0::/29;
allow 2c0f:f248::/32;
另外,如要启用该配置文件,需在刚才写好的站点配置文件 yourls 中再增加两行来使其生效,内容如下所示:
server {
include cf.conf;
deny all;