Noonisy
关于HTTPS和CDN的某某事
2022-08-31
阅读:361

关于HTTPS和CDN的某某事


前段时间没有域名,今天域名终于备案了,可以浅浅的玩一下

SSL证书

首先是 $http$ 转 $https$,需要 $SSL$ 证书,这个东西有免费的,也有收费的,收费的还不便宜,所以我还是选择免费的,比如 $TrustAsia$ 这个机构颁发的有效期为 $1$ 年,其他的也有 $3$ 个月的

还有可以在购买服务器的服务商那里申请证书,一般腾讯云、阿里云都有

申请之后就可以下载,根据不同的服务器类型也有不同的证书,例如
Tomcat,Apcache,Nginx,宝塔面板,etc.
我用的 $Nginx$,下载下来,包含 $4$ 个文件
  • $xx.com.csr$:csr文件
  • $xx.com.key$:密钥文件
  • $xx.com\_bundle.crt$:证书文件
  • $xx.com\_bundle.pem$:证书文件
注意:$csr$ 文件是申请证书时上传或系统在线生成的,提供给 $CA$ 机构。$pem$ 文件是另外的一种格式,可忽略这两个文件

把证书文件$(.crt)$和密钥文件$(.key)$上传到nginx.conf同级的目录下,修改该文件$($或者跟以前一样,修改 $site-availalbe$ 目录下的 $default$ 文件$)$

修改以前 $listen\ 80$ 端口的 $server$,添加如下,修改成自己的域名,$cloud$->$xx$,其他的保持不变
server {
        #SSL 默认访问端口号为 443
        listen 443 ssl; 
        #请填写绑定证书的域名
        server_name cloud.com; 
        #请填写证书文件的相对路径或绝对路径
        ssl_certificate cloud.com_bundle.crt; 
        #请填写私钥文件的相对路径或绝对路径
        ssl_certificate_key cloud.tencent.com.key; 
        ssl_session_timeout 5m;
        #请按照以下协议配置
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; 
        #请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; 
        ssl_prefer_server_ciphers on;
        
        #location / {
            #网站主页路径。此路径仅供参考,具体请您按照实际目录操作。
            #例如,您的网站主页在 Nginx 服务器的 /etc/www 目录下,则请修改 root 后面的 html 为 /etc/www。
            #root html; 
            #index  index.html index.htm;
        #}
    }
注意:使用 $433$ 端口,需要在防火墙开启该端口号

CDN

这天呢,我无意间在 $bilibili$ 还刷到了一个视频,我服务器ip被【必应搜索】展示出来了!??

发现原来 $CDN$ 还可以隐藏真实的源站服务器 $IP$,这也是防止 $DDoS$ 攻击的解决方法之一,有点意思,因为之前用的 $jsdelivr$,于是好奇的我也想试一试腾讯云送的免费 $CDN$$(5555...$为什么不看论文$)$

腾讯云CDN
添加域名
首先,在腾讯云的内容分发网络下,添加域名,需要备案,可以选择
  • 中国境内
  • 中国境外
  • 全球
加速域名就是备案后域名,加速类型有
  • 内容分发网络 $CDN$
  • 全球加速网络 $ECDN$
往下还有细分,我用不着,直接选择网页小文件,其他都没改

源站配置,简单的就选择
  • 自有源
  • $HTTPS$ 或协议跟随
最后填写源站地址,就是上面填的域名指向的服务器 $IP$,端口和权重都可以不填,确认添加
CDN 配置
简单的什么都不改,后面缺什么改什么,这里列举下我后面注意到的可以调整的一些功能

缓存配置-->节点缓存过期配置,这个就是设置各个 $CDN$ 节点的缓存,如果缓存在了 $CDN$ 节点上面,后续的请求就直接去找缓存,而不会访问源站服务器,这样提高了网站的速度,减少了源站的压力,但也可能造成一个问题,比如在源站修改一个 $css$ 文件后,会发现网站并不更新新的样式,因为它直接去访问了原来缓存的 $css$ 文件,并没有访问新的 $css$ 文件,这样引起某些功能延迟或者失效

于是呢,腾讯云的默认设置是,缓存全部文件 $30$ 天,优先级权重为 $1$,缓存文件后缀为 $php、jsp$ 等的后端文件为不缓存,优先级权重为 $2$,这里的优先级权重越大,优先级就越高,越保证了高优先级的功能,也就是默认为:不缓存 $php、jsp$ 等文件,缓存其他的文件 $30$ 天

可以添加规则,文件后缀,添加 $jpg;png;gif;ico;js;css;woff$ 等文件,设置 $30$ 天

当面对上面的问题,修改一些文件,改变了一些功能时,可以在刷新预热页面,清除各个 $CDN$ 节点的缓存,例如在目录预热下,选择刷新全部资源,输入
http://www.test.com/
表示刷新了这个域名下的全部缓存,也可以更加细分的去刷新,清除某个目录下的所有缓存等

同理,还有浏览器缓存过期配置,大多也是缓存静态文件
HTTPS 配置
可以选择选择腾讯云的托管证书,也可以选择本地上传的 $SSL$ 证书,然后开启
  • $HTTP\ 2.0$
  • 强制跳转
  • $HSTS$ 配置
  • $TLS$ 版本配置
高级配置
用量封顶配置,当统计周期产生的用量超出所设置阈值时,可以根据配置关闭 $CDN$ 服务,或请求直接返回源站,不访问 $CDN$ 节点

配置CNAME

上面操作都成功后,就去域名的服务商那里解析 $DNS$,删除相同域名的类型为 $A$ 的解析记录,新增 $CNAME$ 类型的解析记录,可能会有几分钟的延迟

在 $CDN$ 的域名管理中,可以看到解析生效,这样就大功告成了

其他

套用 $CDN$ 后,在 $nginx$ 的日志中获取访问者的 $IP$,并自定义配置格式,修改nginx.conf
sudo vim /etc/nginx/nginx.conf
在 $http$ 中加入以下代码
http {
    # 保留为0表示获取全网段IP
    set_real_ip_from 0.0.0.0/0;
    # header信息
    real_ip_header X-Forwarded-For;

    # 创建log_format
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                                   '$status $body_bytes_sent "$http_referer" '
                                   '"$http_user_agent" "$http_x_forwarded_for"';
    # 在access_log后面加上标签main
    access_log /var/log/nginx/access.log  main;
}
# 重启nginx
sudo service nginx restart

TODO

  • nginx和cdn的更多配置
  • 回源配置
  • 无www跳转www
  • 其他我还不知道的

参考

最后编辑于:2022 年 09 月 28 日 23:03
邮箱格式错误
网址请用http://或https://开头