自己反代Google字体库,实现国内/外均高速访问

2,053次阅读
没有评论

自己反代 Google 字体库,实现国内 / 外均高速访问

最近感觉网站还是把 Google 字体库加上去比较好,非常不想就某堵墙的错 Google 服务访问不通畅的原因导致网站的英文字体全部变丑。突然觉得前段时间将 google 字体去掉完全是一种妥协,非常的不符合我的性格。
很多人推荐使用国内的镜像,但是国内的镜像普遍存在两个问题。
1. 部分不支持 HTTPS
2. 大部分在国外加载缓慢
将自己网页的打开速度寄托在别人服务器上,显然这又是一件不符合我的性格的事情,所以这个绝对不能被采用。
考虑到我的网站用的是 Linode,在国内的访问速度少说也有 100K/ s 吧,哪怕是偏远地区,于是最后我还是决定自己反代一个。

虽然每次不想强调这个悲伤的事实,但是还是得说:本文所述内容不适合大陆 VPS,并且只适合带宽充足,速度较快的国外 VPS,如 Linode Tokyo/Fremont

分割线上方为废话。下面开始正题。
完成这个伟大的目标,你需要:
1.VPS,专用于此的独立 IP。如果你不想让 windows xp 用户正常使用 HTTPS,或者根本不用 HTTPS,或者你有 wildcard 证书,那么独立的 IP 可以不需要。我就是不想让 XP 用户用 HTTPS 访问我的网站,因为需要 HTTPS 的只有我一个。
2.nginx-extras。Apache2 做反代没有尝试过,不在本文的讨论范围内。
3. 域名以及 SSL 证书。如果不需要 HTTPS 访问可以不要 SSL 证书。

STEP.1 安装 nginx 并建立 nginx 配置文件
首先你需要一个正常工作(包括处理 SSL)的 nginx
作为一个小白用户,我曾经不懂得 Ubuntu 直接 apt-get install nginx 安装的 nginx 是不支持 SSL 的,nginx 也不给我报个错,这让我烦恼了很久。
正确安装姿势(Ubuntu):

add-apt-repository ppa:nginx/stable
apt-get update
apt-get install nginx-extras
rm /usr/share/nginx/html/index.html # 这一步视情况而定,不要随意执行。。

正常情况下 nginx 会在配置文件中 include /etc/nginx/sites-enabled/* 和 include
/etc/nginx/conf.d/*.conf,于是我们就在 /etc/nginx/conf.d/ 中新建一个 google.conf 文件。
文件中需要改动的部分已经用中文注释标明。由于这部分内容较长,建议复制到文本编辑器中查看 / 编辑。

upstream google {server fonts.googleapis.com:80;
}
upstream gstatic {server fonts.gstatic.com:80;
}
server {listen 80;
    listen [::]:80;
    server_name fonts.ligstd.com;# 改为自己的字体库域名,fonts.xxxxxx.com valid_referers server_name *.ligstd.com ligstd.com *.hjc.im hjc.im; # 限制引用的域名。改成自己需要用到字体库的网站域名的即可。如果你想要做公益服务,可以将此行和下方的 #if ($invalid_referer) {...} 去掉。 if ($invalid_referer) {return 404;
    }
    location /css {sub_filter ’fonts.gstatic.com’ ’fonts.ligstd.com’;# 将 fonts.ligstd.com 改为自己的字体库域名。 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_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Scheme $scheme;
        proxy_pass http://google; }
    location / {
        proxy_pass_header Server;
        proxy_set_header Host fonts.gstatic.com;
        proxy_redirect off;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Scheme $scheme;
        proxy_pass http://gstatic; }
} # 下方为 HTTPS 设置,如果只需要 HTTP 访问,从这里开始往下的内容就不需要看了。 server {listen 106.186.18.133:443 ssl spdy; # 将这一行改为 "自己的 IP 地址:443" listen [2400:8900::f03c:91ff:fe73:bc8f]:443 ssl spdy;# 将这一行改为 "[自己的 IPv6 地址]:443",没有 IPv6 可以不填。 ssl on;
    ssl_certificate /root/fonts.ligstd.com/ssl.crt; # 改为自己的 SSL 证书位置  ssl_certificate_key /root/fonts.ligstd.com/ssl.key; # 改为自己的 SSL 私钥位置  ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DH+3DES:RSA+3DES:!ADH:!AECDH:!MD5; # 上面几行视情况而定,可以去掉 ssl_ciphers 和 ssl_prefer_server_ciphers 两行。 server_name fonts.ligstd.com;# 改为自己的字体库域名  valid_referers server_name *.ligstd.com ligstd.com *.hjc.im hjc.im;# 同样,改为自己需要使用字体库的网站域名。公益服务去掉这几行。 if ($invalid_referer) {return 404;
    }
    location /css {sub_filter http://fonts.gstatic.com https://fonts.ligstd.com; # 将 fonts.ligstd.com 改为字体库域名,但是 https 千万别改。 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_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Scheme $scheme;
        proxy_pass http://google; }
    location / {
        proxy_pass_header Server;
        proxy_set_header Host fonts.gstatic.com;
        proxy_redirect off;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Scheme $scheme;
        proxy_pass http://gstatic; }
}

建立这样一个配置文件后直接 nginx -s reload,不出任何错误的话,你的字体库域名就可以直接用来替换 fonts.googleapis.com 了。


实如果你不想专门用一个域名 /IP 地址,又想给 XP 用户访问 HTTPS,或者你安装了 apache,nginx 不能监听 80 端口,完全可以将 80 端口换成
其他端口,只是 sub_filter 需要在后面加上端口,并且替换 fonts.googleapis.com 的时候也需要加上。当然,这样就显得没有那么
优雅了。

正文完
 0
评论(没有评论)
验证码