本文介绍了如何使用 Nginx 反向代理谷歌服务,并且替换其中的内容。
我对谷歌字体进行了反代操作,具体见这篇文章:Nginx 反向代理 Google Font、Ajax 和 Gravatar 头像
这儿记一下研究过程中碰到的问题。
Nginx 反向代理配置文件参考
在 Nginx 文件夹下创建 conf 文件,用于反代。
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
配置参数
resolver 8.8.8.8;
检查 proxy_pass
代理地址参数是否正确
proxy_pass $scheme://fonts.googleapis.com:$server_port;
服务器访问 fonts.googleapis.com
会请求 resolver
中配置的 dns,才能请求到资源。
字符串替换无效
检查 sub_filter 是否正确
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
参数是否正确
proxy_set_header Accept-Encoding '';
这个设置了代理资源请求头,当请求谷歌 css
文件的时候,它可能会进行一次 gzip
压缩,这个会导致字符串替换无效。