背景与问题
在用的一个WP插件里面加载了很多静态资源,但是作者将它们都挂在了cdn.jsdelivr.net
下面。这样有下面几个问题:
- cdn.jsdelivr.net可以收集到访问信息
- cdn.jsdelivr.net可能并不可达
为了解决这个问题,我打算通过将资源文件映射到自己的CDN上,然后源站配置为反向代理到cdn.jsdelivr.net
的nginx代理转发。请求流程如下
但前几次访问都是好的,后来发现就变成一直503返回了,但同时使用浏览器都是好的。
分析与解决
经过反复尝试,终于知道了原因出在nginx请求cdn.jsdelivr.net
时并没有允许gzip编码,可能服务商对于此种请求做了频率限制,于是就出现了503的问题。
经过搜索,得知nginx在proxy_pass阶段可以使用gzip,所以接下来只需要配置一下即可。在相应的配置块变成了下面的内容:
1 2 3 4 5 6 7 8 9 10 11 |
location ~* ^/[匹配路径]/(.*) { gzip_proxied any; proxy_pass https://cdn.jsdelivr.net; proxy_set_header Host cdn.jsdelivr.net; proxy_set_header "Referer" "[页面referer]"; proxy_set_header "[页面UA]"; proxy_redirect off; resolver [DNS地址]; error_page 301 302 307 = @handle_redirects; } |
起作用的是gzip_proxied any
,它可以让nginx作为client请求时,允许gzip编码。
经过验证,问题解决。