本文介绍了如何使用 Nginx 反向代理谷歌服务,并且替换其中的内容。
我对谷歌字体进行了反代操作,具体见这篇文章:**Nginx 反向代理 Google Font、Ajax 和 Gravatar 头像**
这儿记一下研究过程中碰到的问题。
Nginx 反向代理配置文件参考
在 Nginx 文件夹下创建 conf 文件,用于反代。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| server { ... resolver 8.8.8.8;
location /css { sub_filter 'fonts.gstatic.com' 'fonts.itnote.me'; sub_filter_once off; sub_filter_types *; proxy_pass $scheme://fonts.googleapis.com:$server_port; proxy_set_header Host fonts.googleapis.com; proxy_set_header Accept-Encoding ''; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; client_max_body_size 1m; proxy_cache_key $scheme$host$request_uri; proxy_cache proxy_cache_zone_of_site_fonts.itnote.me; proxy_cache_valid 200 301 302 7d; proxy_cache_valid any 7d; proxy_cache_min_uses 1; proxy_cache_methods GET HEAD; proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504; proxy_cache_revalidate on; proxy_cache_lock on; proxy_cache_lock_timeout 6s; } ... }
|
遇见的问题
页面 502 错误
检查一下是不是缺少 resolver
配置参数
检查 proxy_pass
代理地址参数是否正确
1
| proxy_pass $scheme://fonts.googleapis.com:$server_port;
|
服务器访问 fonts.googleapis.com
会请求 resolver
中配置的 dns,才能请求到资源。
字符串替换无效
检查 sub_filter 是否正确
1 2 3
| sub_filter 'fonts.gstatic.com' 'fonts.itnote.me'; sub_filter_once off; sub_filter_types *;
|
上面配置的意思是将内容中的 fonts.gstatic.com
替换为 fonts.itnote.me
注意一下其中的 sub_filter_types
需要为 *
代表任何类型资源。
还要检查 proxy_set_header
参数是否正确
1
| proxy_set_header Accept-Encoding '';
|
这个设置了代理资源请求头,当请求谷歌 css
文件的时候,它可能会进行一次 gzip
压缩,这个会导致字符串替换无效。