应对GFW对Google的封锁导致Google Fonts源无法正常使用,本文介绍的是通过海外的服务器来给Fonts源做反向代理的方法。
upstream fonts_google { server fonts.googleapis.com:80; } upstream fonts_gstatic { server fonts.gstatic.com:80; } server { listen 80; listen [::]:80; server_name fonts.nxez.com; access_log /var/log/nginx/fonts_access_log main; valid_referers server_name *.nxez.com nxez.com; if ($invalid_referer) { return 403; } location /css { sub_filter 'fonts.gstatic.com' 'fonts.nxez.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://fonts_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://fonts_gstatic; } }
解释一下上面的一些东西:
sub_filter ‘fonts.gstatic.com’ ‘fonts.miskcoo.com’; 这一行是把返回的所有东西里边的 fonts.gstatic.com 替换成我们自己的域名,要不然你得到了 css 文件,字体内容还是在 google 上面
然后 sub_filter_once off; 是表示全部替换,proxy_set_header Accept-Encoding ”; 这要求 google 返回不压缩的内容,因为压缩了就没有办法进行替换了
接着第二个 location / 的配置主要是字体文件的地址,你看看第一个配置返回的 css 就会知道该怎么写了
然后关于 valid_referers server_name *.miskcoo.com miskcoo.com; 是限制只有从这些域名访问才可以(如果你觉得你的流量啥的很多或者想做慈善事业当然就不用了)
然后下面是 HTTPS 的配置方法,你可以直接把端口改成 443,然后加上下面这些东西
ssl on; ssl_certificate your_crt.crt; ssl_certificate_key your_key.key;
至于证书…… 如果你有当然好、但是没有的话就自己签发一个(要安装 openssl),运行下面这段就好了
要注意的是,在中间会叫你填一大堆东西,唯一一个重要的是 Common Name,这个写上你的域名,要不然有的浏览器会不认
openssl genrsa -des3 -out server.key 2048 openssl rsa -in server.key -out server.key # 这是生成没有密码的证书,你刚开始要输入一个四位以上的密码 openssl req -new -key server.key -out server.csr openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt
之后你把 server.crt 复制到本机,然后导入到浏览器就好了
Nginx 报 unknown directive “sub_filter” 的问题解决
这个问题是没有安装 HttpSubModule 模块导致的,安装模块之后解决。
1.下载需要的文件
# 下载第三方模块 # cd ~ # git clone git://github.com/yaoweibin/ngx_http_substitutions_filter_module.git
2.查看之前Nginx编译configure
# nginx -V nginx version: nginx/1.2.7 built by gcc 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) TLS SNI support enabled configure arguments: --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-ipv6
因为Nginx编译安装第三方模块的时候需要添加上之前编译的configure参数,然后重新设置configure编译(但是不覆盖安装,只make不install):
./configure --prefix=/你的安装目录 --add-module=/第三方模块目录
3.重新编译Nginx
# 打开Nginx编译目录,版本号可能不同 # cd ~/lnmp1.0-full/nginx-1.2.7 # 重新configure # ./configure --prefix= --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-ipv6 --with-http_sub_module --add-module=/root/ngx_http_substitutions_filter_module # make
备注:重新编译的时候,记得一定要把以前编译过的模块一同加到configure参数里面.
4.覆盖原Ngixn文件
# /etc/init.d/nginx stop # cd cd objs/ # 覆盖原文件 # cp nginx /usr/local/nginx/sbin/ # /etc/init.d/nginx start
引用参考:
http://ju.outofmemory.cn/entry/71031
http://blog.miskcoo.com/2014/08/nginx-reverse-proxy-google-fonts
http://jybb.me/nginx-proxy-pass-and-substitutions4nginx
http://jybb.me/nginx-proxy-pass-and-cache
http://nginx.org/en/docs/http/ngx_http_sub_module.html
https://code.google.com/p/substitutions4nginx/
http://wiki.nginx.org/3rdPartyModules
2 Comments
[…] 用 Nginx 反向代理 Google Fonts http://wangxianyuan.com/post/nginx-reverse-proxy-with-google-fonts 注意: 需要为你用来做反向代理的子域名添加dns解析; […]
[…] https://zh.wikipedia.org/zh/反向代理 https://jkyin.me/ru-he-zai-ubuntu-14-04-shang-wei-nginx-tian-jia-lets-encrypt/ http://wrfly.kfd.me/Nginx搭建反向代理服务/ https://www.v2ex.com/t/249435 http://wangxianyuan.com/post/nginx-reverse-proxy-with-google-fonts […]