最新消息:

用 Nginx 反向代理 Google Fonts

教程 yan 23浏览 0评论
(adsbygoogle = window.adsbygoogle || []).push({});

应对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;     } }

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;

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

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

# 下载第三方模块 # 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 -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=/第三方模块目录

./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 </pre   备注:重新编译的时候,记得一定要把以前编译过的模块一同加到configure参数里面.   4.覆盖原Ngixn文件 <pre lang="bash" escaped="true"> # /etc/init.d/nginx stop # cd cd objs/ # 覆盖原文件 # cp nginx /usr/local/nginx/sbin/ # /etc/init.d/nginx start

# 打开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 </pre 备注:重新编译的时候,记得一定要把以前编译过的模块一同加到configure参数里面. 4.覆盖原Ngixn文件 <pre lang="bash" escaped="true"> # /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

用 nginx 反向代理 google fonts

nginx反代加替换傻瓜教程

nginx反代加缓存傻瓜教程

http://nginx.org/en/docs/http/ngx_http_sub_module.html

https://code.google.com/p/substitutions4nginx/

http://wiki.nginx.org/3rdPartyModules

转载请注明:E644 » 用 Nginx 反向代理 Google Fonts

发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址