Nginx Resolver 防盗链再也难不倒我
在开发XVideo的工具的时候遇到了某艺,某瓣的防盗链... 关键字: nginx,resolver,404,502,proxy_pass [[toc]]
背景
之前是是用比较粗暴的方法实现的,如下:
location /aqy/0/ { ... }
location /aqy/1/ { ... }
location /aqy/2/ { ... }
location /aqy/3/ { ... }
location /aqy/4/ { ... }
location /aqy/5/ { ... }
...更多
会不会很头晕,如果再加上某瓣的,你就会遇到一个问题负载均衡的报错...
解决
location ~ ^/aqy/(\d?)/(.*) {
proxy_set_header Referer https://list.iqiyi.com/;
proxy_pass https://pic$1.iqiyipic.com/$2;
}
看起来是不是不错 :) ,但是很可惜你也无法访问到图片
不出所料的话你将会遇到一个502
如果你还不认识resolver
server {
server_name wfk.mohuani.com;
location / {
# 代理的是域名且含有变量 502
proxy_pass https://www.baidu.com/abc/$1/$2;
# 代理IP且含有变量 402
proxy_pass https://113.105.77.194/abc/$1/$2;
# 同上报 404
proxy_pass https://127.0.0.1/abc/$1/$2;
# 代理地址包含 server_name 且含有变量 404
proxy_pass https://wfk.mohuani.com/abc/$1/$2;
}
}
所以当你了解了resolver只用代理一个DNS就可以解决
location / {
resolver 233.5.5.5;
proxy_pass ...
}
所以我们可以知道 proxy_pass 实际上并不是每次都回去解析DNS,所以在我们调试的时候会发生偶尔生效了以为配置成功了,不过一会儿又502了 :(
Resolver 就是动态解析DNS确保每次 代理都能查询到域名的IP
匹配优先级
如果你对Nginx的匹配优先级还不了解,也可以阅读下 Nginx location 正则
= > ^~ > ~ > ~* > 不带符号