Skip to content

Nginx 反向代理中的内容替换

Published: at 08:48 PMSuggest Changes

本文介绍了如何使用 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 压缩,这个会导致字符串替换无效。


Previous Post
Jenkins 添加 GitHub 仓库时遇到的权限问题
Next Post
Safari 下载中文文件名乱码解决方案