XIKEW.COM - 公读宝典 - Nginx Resolver 防盗链再也难不倒我 - 公读宝典,nginx,resolver,404,502,proxy_pass - 在开发XVideo的工具的时候遇到了某艺,某瓣的防盗链...

Nginx Resolver 防盗链再也难不倒我
NGINX PROXY_PASS 502 404 4/13/2022 9:07:27 PM 阅读:40

在开发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 正则

= > ^~ > ~ > ~* > 不带符号

感谢