移除GoogleApi–Sed,Grep命令与Nginx

前言

最近搭建了一个基于NodeBB的论坛,然而老外的东西自然调用GoogleApi,主要是字体。这玩意导致我网页加载慢得裂开,而且有地方还被屏蔽了,简单的做法就是替换GoogleApi成为一个别的,我们这里使用Nginx反代加缓存(交给CDN)。

Nginx反代镜像

用两成功力写一下配置文件。

server {
    listen 80;
    listen [::]:80;
    server_name fonts.cukee.cc;
    location /css {
        sub_filter 'http://fonts.gstatic.com' 'https://fonts.cukee.cc';
        sub_filter_once off;
        sub_filter_types text/css;
        proxy_pass_header Server;
        proxy_set_header Host fonts.googleapis.com;
        proxy_set_header Accept-Encoding '';
        proxy_redirect off;
        proxy_pass http://google;
    }
    
    location / {
        proxy_pass_header Server;
        proxy_set_header Host fonts.gstatic.com;
        proxy_redirect off;
        proxy_pass http://gstatic;
    }
    
    access_log  /www/wwwlogs/fonts.cukee.cc.log;
    error_log  /www/wwwlogs/fonts.cukee.cc.error.log;
}

upstream google {
    server fonts.googleapis.com:80;
}

upstream gstatic {
    server fonts.gstatic.com:80;
}

好,配置文件写完了。讲一下过程中遇到的问题和特点。

首先,我把缓存的工作交给CDN了,所以就没设置Nginx的缓存。

sub_filter 'http://fonts.gstatic.com' 'https://fonts.cukee.cc';

这行配置文件是把fonts.gstatic.com替换成我们的链接,替换文字需要更改。

Sed配合Grep批量替换文本

好,接下来我们需要替换我们网站文件中的fonts.googleapi.com,我使用的命令如下。

sed -i "s#fonts.googleapis.com#fonts.cukee.cc#g" `grep -r -l fonts.googleapis.com  *`
sed -i "s#http://fonts.cukee.cc#https://fonts.cukee.cc#g" `grep -r -l http://fonts.cukee.cc  *`

好,可以看到,我用了两步,第二部其实是把http转成https,因为我在CDN上启用了HSTS,如果发送http请求会报错。

sed -i "s#查找内容#替换内容#g" 替换文件

这是sed的替换命令,s表示替换。后面跟上替换内容,这里我需要替换整个目录,单用sed显然不行。

grep -r -l 替换内容 *

我们组合一下就是这样。

sed -i "s#查找内容#替换内容#g" `grep -r -l 替换内容 *`

多说一句,NodeBB需要重新build一下才能生效。

留下评论